当与数组一起使用时,htmlentities()返回空字符串

时间:2016-10-31 13:59:01

标签: php arrays html-entities array-map

当我使用htmlentities()对变量进行编码时,它就像一个魅力,但如果我对数组做同样的事情,它只返回一个空数组。我尝试使用array_map(),但这是同一个故事。我尝试将编码切换为ISO-8859-1UTF-8,但没有成功。它不想工作。

以下是代码:

<html>
 <head>
  <title>Signup</title>
 </head>
 <body>
  <form name="signup" method="POST" action="form.php">
   <fieldset>
    <legend><p style="color:red; font-size:16px">Sports</p></legend>
    <ul>
     <li>
      <input type="checkbox" name="sports[]" value="soccer">
      <label for="soccer">Soccer</label>
     </li>
     <li>
      <input type="checkbox" name="sports[]" value="water_polo">
      <label for="water_polo">Water polo</label>
     </li>
     <li>
      <input type="checkbox" name="sports[]" value="tennis">
      <label for="tennis">Tennis</label>
     </li>
     <li>
      <input type="checkbox" name="sports[]" value="volleyball">
      <label for="volleyball">Volleyball</label>
     </li>
    </ul>
   </fieldset>
  </form>
  <?php
   $sports = htmlentities($_POST["sports"], ENT_COMPAT, 'ISO-8859-15');

   $count = count($sports);
   if($count == 0) {
        echo "You don't play any sports.<br>";
   } else {
        echo "You like playing: ";
        foreach($sports as $s) {
             if(--$count == 0) {
                  echo "<span style='color:red'>$s</span>.<br>";
                  break;
             } else {
                  echo "<span style='color:red'>$s</span>, ";
             }
        }
   }
  ?>
 </body>
</html>

它产生以下输出:

You don't play any sports.

含义htmlentities()无法对我的数组进行编码。

1 个答案:

答案 0 :(得分:1)

我不确定您是如何尝试使用array_map的,但以下是一种正确的方法:

function sanitize($arg) {
    if (is_array($arg)) {
        return array_map('sanitize', $arg);
    }

    return htmlentities($arg, ENT_QUOTES, 'UTF-8');
}
$array = array_map('sanitize', $_POST);

这使用递归,因此它也适用于多维数组。