htmlspecialchars() expects parameter 2 to be long, array givenというエラーについて
度々失礼します。
htmlspecialchars() expects parameter 2 to be long, array givenというエラーが出たので解決策をしらべていたのですが、文字列を入れるべきところを配列を入れてしまっていることが原因だとは分かりました。
しかし、参考にさせていただいたところには「配列でも処理できるようになっています」と書かれています。
配列を入れたらエラーが出るのに、配列でも処理できるようになっているというのはどういう事なのでしょうか?
HTMLでのエスケープを処理する関数として、以下のコードを書いています。
<?php
//htmlでのエスケープ処理
function h($var)
{
if(is_array($var)){
return array_map('h',$var);
}else{
return htmlspecialchars($var,ENT_QUOTES,'UTF-8');
}
}
?>
ちなみにですが、このコードの書かれたファイルを実行してもブラウザは真っ白な状態でなにも表示されません。
本体(?)もといエラーメッセージの出たコードの部分は
<?php
// HTTPヘッダーで文字コードを指定
header("Content-Type:text/html; charset=UTF-8");
?>
<?php
//h()関数の読み込み
require_once 'h.php';
//checkinput()関数の読み込み
require_once 'checkinput.php';
//POSTされたデータのチェック
$_POST = checkinput($_POST);
//三項演算子で検索文字列の有無を判定し処理
$data = isset($_POST['data']) ? trim($_POST['data']) : '';
//入力された検索文字列をexplode()関数で半角スペースで区切って配列に代入
//全角スペースはmb_convert_kana()関数で半角スペースに変換
$datalist = explode(' ', mb_convert_kana($data, 's'));
//値が空の要素を削除
$datalist = array_filter($datalist,function($val){
return $val != '';
});
//値でソートしてキーを0から振り直す
sort($datalist);
?>
となっており、エラーメッセージにはon line 6 と書かれています。
初心者で申し訳ないですが、力を貸していただきたいです。 よろしくお願いします。
追記
checkinput.phpの中身は以下のとおりです。
<?php
//htmlでのエスケープ処理
function checkinput($var){
if(is_array($var)){
return htmlspecialchars('checkinput',$var);
}else{
//magic_quotes_gpcへの対策
if(get_magic_quotes_gpc()){
$var = stripslashes($var);
}
//nullバイト攻撃対策
//nullバイトを含む制御文字が含まれていないかをチェック(最大1000文字)
if(preg_match('/\A[\r\n\t[:^cntrl:]]{0,1000}\z/u',$var) == 0){
die('不正な入力です。');
}
//文字エンコードの確認
if(!mb_check_encoding($var,'UTF-8')){
die('不正な入力です。');
}
return $var;
}
}
?>