配列の各値をエスケープする方法をメモ。
1次元配列
配列の値をエスケープする場合、foreachで行えます。
PHP
<?php
$array = array(
'str' => 'ラブライブ!',
'tags' => '<div class="maki"></div>',
'apos' => "I'm Erichika!",
'and' => 'MYTH & ROID'
);
foreach($array as $key => $value) {
$array[$key] = htmlspecialchars($value);
}
var_dump($array);
?>
以下の値が出力されます。
array(4) {
["str"]=>
string(16) "ラブライブ!"
["tags"]=>
string(46) "<div class="maki"></div>"
["apos"]=>
string(13) "I'm Erichika!"
["and"]=>
string(15) "MYTH & ROID"
}
「’」もエスケープしたい場合、htmlspecialcharsの第2引数にENT_QUOTESを指定します。
PHP
<?php
$array = array(
'str' => 'ラブライブ!',
'tags' => '<div class="maki"></div>',
'apos' => "I'm Erichika!",
'and' => 'MYTH & ROID'
);
foreach($array as $key => $value) {
$array[$key] = htmlspecialchars($value, ENT_QUOTES);
}
var_dump($array);
?>
以下の値が出力されます。
array(4) {
["str"]=>
string(16) "ラブライブ!"
["tags"]=>
string(46) "<div class="maki"></div>"
["apos"]=>
string(18) "I'm Erichika!"
["and"]=>
string(15) "MYTH & ROID"
}
foreachではなくarray_map()でもエスケープを行えます。
PHP
<?php
$array = array(
'str' => 'ラブライブ!',
'tags' => '<div class="maki"></div>',
'apos' => "I'm Erichika!",
'and' => 'MYTH & ROID'
);
$array2 = array_map('htmlspecialchars', $array);
var_dump($array2);
?>
以下の値が出力されます。
array(4) {
["str"]=>
string(16) "ラブライブ!"
["tags"]=>
string(46) "<div class="maki"></div>"
["apos"]=>
string(13) "I'm Erichika!"
["and"]=>
string(15) "MYTH & ROID"
}
多次元配列
配列をエスケープする関数を用意しておいて、エスケープする値が配列の場合は、その値に対してエスケープの関数を実行するようにします。
PHP
<?php
$array = array(
'str' => 'ラブライブ!',
'tags' => array(
'maki' => '<div class="maki"></div>',
'rin' => '<div class="rin"></div>',
'hanayo' => '<div class="kayo"></div>'
),
'apos' => "I'm Erichika!",
'and' => 'MYTH & ROID'
);
function escape($array) {
foreach($array as $key => $value) {
if (is_array($value)) {
$array[$key] = escape($value);
} else {
$array[$key] = htmlspecialchars($value);
}
}
return $array;
}
$array2 = escape($array);
var_dump($array2);
?>
以下の値が出力されます。
array(4) {
["str"]=>
string(16) "ラブライブ!"
["tags"]=>
array(3) {
["maki"]=>
string(46) "<div class="maki"></div>"
["rin"]=>
string(45) "<div class="rin"></div>"
["hanayo"]=>
string(46) "<div class="kayo"></div>"
}
["apos"]=>
string(13) "I'm Erichika!"
["and"]=>
string(15) "MYTH & ROID"
}
【参考サイト】
コメントが承認されるまで時間がかかります。