Php htmlspecialchars():参数中的多字节序列无效

Php htmlspecialchars():参数中的多字节序列无效,php,cakephp,warnings,htmlspecialchars,Php,Cakephp,Warnings,Htmlspecialchars,我在我的本地站点上收到此错误 Warning (2): htmlspecialchars(): Invalid multibyte sequence in argument in [/var/www/html/cake/basics.php, line 207] 有没有人知道问题出在哪里,或者应该如何解决 谢谢。如果您的文件编码如下,请确保指定UTF-8的编码: htmlspecialchars($str, ENT_COMPAT, 'UTF-8'); htmlspecialchars的默认字

我在我的本地站点上收到此错误

Warning (2): htmlspecialchars(): Invalid multibyte sequence in argument in [/var/www/html/cake/basics.php, line 207]
有没有人知道问题出在哪里,或者应该如何解决


谢谢。

如果您的文件编码如下,请确保指定UTF-8的编码:

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

htmlspecialchars
的默认字符集是ISO-8859-1(从PHP v5.4开始,默认字符集被改为“UTF-8”),这可能解释了为什么遇到多字节字符时会出现混乱。

您正在将损坏的字符数据输入函数,或者没有指定正确的编码

我不久前就遇到过这个问题,以前的行为(我相信在PHP5.2.7之前)是返回字符串,尽管存在损坏,但由于该版本,它将抛出此错误

我的解决方案是编写一个脚本,通过使用//IGNORE修饰符删除损坏的数据来为字符串提供信息

(我们有一个损坏的数据库,其中有些字符串是UTF-8,有些是拉丁语-1,通常列上的字符类型定义不正确)


(查看对Tatu答案的评论,我将首先查看(并处理)$charset变量的内容。

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

有时我不使用_;()翻译,只使用包含_;的纯德语文本。 在这里,特别重要的是要注意文件的编码


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

我在生产中遇到了这个错误,并找到了这篇关于它的文章-


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

为避免出现任何错误,正确的代码是:

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

除此之外,您还可以使用
str\u replace
根据需要替换一些错误字符,然后使用htmlentities函数


看看这个,它替换了更大的html符号到gt;标记,这在阅读rss提要时可能不好看。你可以用“-”或“)”等来替换它。

也有同样的问题,因为我在utf-8字符串上使用了
substr

错误很少发生,而且似乎是随机的。仅当在多字节字符上剪切字符串时发生错误


mb_substr
解决了问题:)

第207行在这里$字符集='UTF-8';htmlspecialchars($text,ENT_QUOTES,$charset);//第207行对我来说,问题恰恰相反,当我试图在htmlspecialchars中将数据编码为“UTF-8”时,数据的字符集实际上是“ISO-8859-1”。我将charset参数切换为'ISO-8859-1',这就解决了问题。至少,在我能够将所有内容完全更新为“UTF-8”之前,从PHP5.4.0开始,
htmlspecialchars()
的第三个参数的默认值是
'UTF-8'
——这个答案应该更新。我同意。我通过iconv或mb_convert_encoding()传递了用户数据,“from”和“to”字符集相同。通常有一个选项可以去除无效字符。这里的数据也被破坏了,mb_convert_编码($var,'UTF-8')完成了这项工作。