配列の各値をエスケープする方法をメモ。
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" }
【参考サイト】
コメントが承認されるまで時間がかかります。