【发布时间】: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
我在本地站点中收到此错误。
Warning (2): htmlspecialchars(): Invalid multibyte sequence in argument in [/var/www/html/cake/basics.php, line 207]
有谁知道,这是什么问题或应该有什么解决方案?
谢谢。
【问题讨论】:
标签: php cakephp warnings htmlspecialchars
如果您的文件是这样编码的,请务必将编码指定为 UTF-8:
htmlspecialchars($str, ENT_COMPAT, 'UTF-8');
htmlspecialchars 的默认字符集是 ISO-8859-1(从 PHP v5.4 开始,默认字符集被转换为 'UTF-8'),这或许可以解释为什么遇到多字节字符时会出现问题。
【讨论】:
htmlspecialchars() 的第三个参数的默认值为'UTF-8' - 这个答案应该更新了。
我在生产中遇到了这个错误,发现了这篇很棒的帖子 -
http://insomanic.me.uk/post/191397106/php-htmlspecialchars-htmlentities-invalid
这似乎是 PHP 中的一个错误(至少对于 CentOS),当显示错误关闭时会显示此错误!
【讨论】:
您将损坏的字符数据输入函数,或未指定正确的编码。
我前段时间遇到过这个问题,旧的行为(我相信在 PHP 5.2.7 之前)是返回字符串,尽管有损坏,但是自从那个版本之后它会抛出这个错误。
我的解决方案涉及编写一个脚本,使用 //IGNORE 修饰符通过iconv 提供我的字符串以删除损坏的数据。
(我们有一个损坏的数据库,其中有一些 UTF-8 字符串,一些 latin-1 字符串,通常在列上具有错误定义的字符类型)。
(查看对 Tatu 的回答的评论,我将首先查看(并使用)$charset 变量的内容。
【讨论】:
为了不出错,正确的代码是:
htmlentities($string, ENT_IGNORE, 'UTF-8') ;
除此之外,您还可以使用str_replace 来根据您的需要替换一些坏字符,然后使用 htmlentities 函数。
看看这个rss feed它把更大的html符号替换为gt;阅读您的 RSS 提要时可能看起来不太好看的标签。您可以将其替换为“-”符号或“)”等。
【讨论】:
遇到了同样的问题,因为我在 utf-8 字符串上使用了 substr。
错误很少发生,而且看似随机。仅当在多字节字符上剪切字符串时才会发生错误!
mb_substr 解决了这个问题:)
【讨论】:
这实际上是我遇到的最常见的错误之一。
有时我不使用 __() 翻译 - 只是包含 äöü 的纯德语文本。 尤其要注意文件的编码。
因此,请确保将包含特殊字符的文件正确保存为 UTF8。
【讨论】: