【问题标题】:array_map and htmlentitiesarray_map 和 htmlentities
【发布时间】:2012-02-05 15:29:57
【问题描述】:

我一直在尝试使用array_map将字符转换为 HTML 实体htmlentities() 如下所示:

$lang = array_map('htmlentities', $lang);

我的数组如下所示:

$lang = array();
$lang['var_char1']['varchar2'] = 'Some Text';

但我不断收到此错误

警告:htmlentities() 期望参数 1 是字符串,给定数组 在 /home/user/public_html/foo/lang/en.inc.php 第 1335 行

有谁知道可能是什么问题?谢谢!

【问题讨论】:

  • 您正在使用嵌套数组。如果你使用普通的就可以了
  • 您打算对多维$lang 数组的每个元素执行htmlentities() 吗?如果是这样,您将需要递归而不是平面 array_map()

标签: php arrays html-entities


【解决方案1】:

使用array_walk_recursivearray_map 不适用于多维数组:

array_walk_recursive($lang, function (&$value) {
    $value = htmlentities($value);
});

【讨论】:

    【解决方案2】:

    因为$lang是一个二维数组,所以不起作用

    二维数组需要使用for循环

    foreach($$lang as &$l):
        $l = array_map('htmlentities', $l);
    }
    

    【讨论】:

      【解决方案3】:

      $lang['var_char1']['varchar2']定义了一个多维数组,所以$lang的每个元素也是一个数组。 array_map() 遍历 $lang,将数组而不是字符串传递给 htmlentities()

      【讨论】:

        【解决方案4】:

        array_map() 不能递归工作。如果你知道你的数组总是两层深,你可以循环遍历它并在子数组上使用 array_map。

        【讨论】:

          【解决方案5】:

          如果你喜欢引号

          
          function stripslashes_array(&$arr) {
              array_walk_recursive($arr, function (&$val) {
                  $val = htmlentities($val, ENT_QUOTES);
              });
          }
          

          post、get、dll中的多个数组

          stripslashes_array($_POST);
          
          stripslashes_array($_GET);
          
          stripslashes_array($_REQUEST);
          
          stripslashes_array($_COOKIE);
          

          【讨论】:

            【解决方案6】:

            $lang 中的每个元素都是一个数组,因此您传递给 array_map 的函数应该将一个数组作为参数。 'htmlentities' 不是这种情况,它需要一个字符串。

            你可以:

            $map_htmlentities = function(array) { return array_map('htmlentities', array); };
            

            然后

            $lang = array_map($map_htmlentities, $lang);
            

            从 PHP 7.4 开始,您可以使用 lambda:

            $lang = array_map(fn($arr) => array_map('htmlentities', $arr), $lang);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-08-11
              • 2017-02-13
              • 2014-05-31
              • 1970-01-01
              • 2011-03-26
              相关资源
              最近更新 更多