【问题标题】:PHP htmlspecialchars errorPHP htmlspecialchars 错误
【发布时间】:2009-08-22 21:15:47
【问题描述】:

为什么会这样

$trader_details = array_walk($trader_details, 'htmlspecialchars');

给出这个错误?

Severity: Warning
Message: htmlspecialchars() expects parameter 2 to be long, string given

afaik htmlspecialchars 除了输入字符串之外只有可选参数吗?这在 codeigniter 中运行

谢谢

【问题讨论】:

  • 删除了 codeigniter 标签,因为它似乎没有导致错误。

标签: php htmlspecialchars


【解决方案1】:

传递给array_walk的回调函数期望第二个参数是数组元素的键:

通常,funcname 有两个参数。 array 参数的值是第一个,键/索引是第二个。

但是htmlspecialchars 期望第二个参数是引用样式(通常由整数类型的ENT_* constants 之一指定)。

改用array_map。它只使用数组的值。

【讨论】:

  • 严重性:警告消息:array_map() [function.array-map]:第一个参数“Array”应为 NULL 或有效回调
  • @stef :看一下手册:array_map 想要的参数顺序不同于 array_walk (是的……这对 PHP 来说不是很好 ^^ );请参阅 php.net/array_walkphp.net/array_map :array_map 期望首先回调,然后是数组
【解决方案2】:

array_walk 默认传递 2 个参数。第一个是数组项值,第二个是数组项键。它试图将数组键作为第二个参数传递给 htmlspecialchars,它期望第二个参数是定义要使用的引用样式的整数。

【讨论】:

    【解决方案3】:

    http://uk.php.net/array_walk 说:

    功能名称
    通常,funcname 有两个参数。数组参数的值是第一个,键/索引第二个

    您可能正在寻找aray_map。 另请注意,htmlspecialchars() 默认使用 iso-8859-1 作为编码。如果您的输出是例如utf-8 编码,您必须将该信息作为第三个参数传递给 htmlspecialchars。否则结果可能是错误的。
    php 5.3:

    $foo = array_map(
      function($x) { return htmlspecialchars($x, ENT_QUOTES, 'utf-8'); },
      $trader_details
    );
    

    【讨论】:

      【解决方案4】:

      我假设 $trader_details 是一个字符串数组? htmlspecialchars() 的第二个参数是一个整数类型,用于指定要使用的引号样式。

      您可能想使用array_map。如果 $trader_details 是一个二维数组,请将其发布,以便我们了解您要执行的操作。

      【讨论】:

        【解决方案5】:

        array_walk 将 2 个参数传递给您的方法(htmlspecialchars),第一个是当前数组元素的值,第二个是当前元素的 key

        所以,如果

        $trader_details = array('key' => 'value');
        

        然后

        $trader_details = array_walk($trader_details, 'htmlspecialchars');
        

        通话

        htmlspecialchars('value', 'key')
        

        这是不正确的,htmlspecialchars 要求第二个参数是整数 - int $quote_style

        【讨论】:

          【解决方案6】:

          我认为它不会做你想做的事,即使它有效。

          htmlspecialchars() 函数不修改字符串,它只是返回一个带有修改的新字符串。数组遍历不会有任何影响。

          【讨论】:

            【解决方案7】:

            错误很明显……array_walk的第二个参数是关于函数回调的,函数需要有2个参数。第一个用于值,第二个用于键..

            【讨论】:

            • 如何使用array_walk 向函数发送多个参数并不明显。 OP 并不是第一个遇到这个问题的人。
            猜你喜欢
            • 1970-01-01
            • 2021-11-16
            • 1970-01-01
            • 2020-09-30
            • 2012-07-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多