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

时间:2010-09-27 12:52:42

标签: php cakephp warnings htmlspecialchars

我在本地网站收到此错误。

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

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

感谢。

6 个答案:

答案 0 :(得分:14)

如果文件编码如下,请务必将编码指定为UTF-8:

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

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

答案 1 :(得分:5)

我在制作时遇到了这个错误并找到了关于它的好文章 -

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

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

答案 2 :(得分:4)

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

前一段时间我遇到过这个问题,旧的行为(我认为在PHP 5.2.7之前)是尽管腐败仍然返回字符串,但是从那个版本开始它会抛出这个错误。

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

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

(看看对Tatu回答的评论,我会先看看(和玩)$ charset变量的内容。

答案 3 :(得分:1)

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

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

除此之外,您还可以使用str_replace将一些不良字符替换为您的需要,然后使用htmlentities功能。

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

答案 4 :(得分:1)

因为我在utf-8字符串上使用substr而遇到同样的问题 错误很少见,似乎是随机的。只有在多字节字符串上剪切字符串时才会出错!

mb_substr解决了问题:)

答案 5 :(得分:0)

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

有时我不使用__()翻译 - 只是包含äöü的普通德语文本。 在那里,记住文件的编码尤其重要。

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