【问题标题】:htmlspecialchars(): Invalid multibyte sequence in argumenthtmlspecialchars():参数中的多字节序列无效
【发布时间】:2010-09-27 12:52:42
【问题描述】:

我在本地站点中收到此错误。

Warning (2): htmlspecialchars(): Invalid multibyte sequence in argument in [/var/www/html/cake/basics.php, line 207]

有谁知道,这是什么问题或应该有什么解决方案?

谢谢。

【问题讨论】:

    标签: php cakephp warnings htmlspecialchars


    【解决方案1】:

    如果您的文件是这样编码的,请务必将编码指定为 UTF-8:

    htmlspecialchars($str, ENT_COMPAT, 'UTF-8');
    

    htmlspecialchars 的默认字符集是 ISO-8859-1(从 PHP v5.4 开始,默认字符集被转换为 'UTF-8'),这或许可以解释为什么遇到多字节字符时会出现问题。

    【讨论】:

    • 第 207 行在这里。 $charset = 'UTF-8'; htmlspecialchars($text, ENT_QUOTES, $charset); // 第 207 行
    • 对我来说,这个问题最终是相反的,当我试图在 htmlspecialchars 中将其编码为“UTF-8”时,我的数据字符集实际上是“ISO-8859-1”。我将 charset 参数切换为 'ISO-8859-1' 并解决了问题。至少,在我可以将所有内容完全更新为“UTF-8”之前。
    • 从 PHP 5.4.0 开始,htmlspecialchars() 的第三个参数的默认值为'UTF-8' - 这个答案应该更新了。
    【解决方案2】:

    我在生产中遇到了这个错误,发现了这篇很棒的帖子 -

    http://insomanic.me.uk/post/191397106/php-htmlspecialchars-htmlentities-invalid

    这似乎是 PHP 中的一个错误(至少对于 CentOS),当显示错误关闭时会显示此错误!

    【讨论】:

      【解决方案3】:

      您将损坏的字符数据输入函数,或未指定正确的编码。

      我前段时间遇到过这个问题,旧的行为(我相信在 PHP 5.2.7 之前)是返回字符串,尽管有损坏,但是自从那个版本之后它会抛出这个错误。

      我的解决方案涉及编写一个脚本,使用 //IGNORE 修饰符通过iconv 提供我的字符串以删除损坏的数据。

      (我们有一个损坏的数据库,其中有一些 UTF-8 字符串,一些 latin-1 字符串,通常在列上具有错误定义的字符类型)。

      (查看对 Tatu 的回答的评论,我将首先查看(并使用)$charset 变量的内容。

      【讨论】:

      • 我同意。我通过 iconv 或 mb_convert_encoding() 传递了用户数据,“from”和“to”字符集相同。通常可以选择去除无效字符。
      • 这里的数据也损坏了,mb_convert_encoding($var, 'UTF-8') 完成了这项工作。
      【解决方案4】:

      为了不出错,正确的代码是:

      htmlentities($string, ENT_IGNORE, 'UTF-8') ;

      除此之外,您还可以使用str_replace 来根据您的需要替换一些坏字符,然后使用 htmlentities 函数。

      看看这个rss feed它把更大的html符号替换为gt;阅读您的 RSS 提要时可能看起来不太好看的标签。您可以将其替换为“-”符号或“)”等。

      【讨论】:

        【解决方案5】:

        遇到了同样的问题,因为我在 utf-8 字符串上使用了 substr
        错误很少发生,而且看似随机。仅当在多字节字符上剪切字符串时才会发生错误!

        mb_substr 解决了这个问题:)

        【讨论】:

          【解决方案6】:

          这实际上是我遇到的最常见的错误之一。

          有时我不使用 __() 翻译 - 只是包含 äöü 的纯德语文本。 尤其要注意文件的编码。

          因此,请确保将包含特殊字符的文件正确保存为 UTF8。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-06-10
            • 1970-01-01
            • 1970-01-01
            • 2014-12-21
            • 2011-01-26
            • 1970-01-01
            • 2015-07-04
            相关资源
            最近更新 更多