2

我的网站上的 Â 字符有问题。

我有一个网站,用户可以使用所见即所得的编辑器(ckeditor)来填写他们的个人资料。内容在放入数据库之前通过 htmlpurify 运行(出于安全原因)。

数据库的所有表都设置为 UTF-8 字符集。我还在脚本执行开始时调用'SET NAMES utf-8'以防止出现问题(这已经工作了多年,因为我很长时间没有遇到这个问题了)。显示文本的网页的内容类型为 utf-8,我还使用 header() 函数来设置内容类型和字符集。

显示文本时一切似乎都很好,直到我尝试在内容上运行正则表达式。html_entity_decode(使用'utf-8'的编码参数调用)由于某种原因正在删除/不显示Â字符,并且它留下了导致我所有正则表达式失败的东西(似乎那里有一个字符,但我不能在源代码中查看它)。

如何防止和/或删除此字符,以便运行正则表达式?

编辑:我决定放弃 ckeditor 并使用本网站使用的降价格式,以获得更大的灵活性。从我记事起,我就讨厌所见即所得的编辑器。将所有配置文件更新为新格式将使我有机会删除所有有问题的文本并为网站提供一个全新的开始。感谢所有的投入。

4

2 回答 2

1

Since the character you are talking about exists within the ANSI charset, you can do this:

utf8_encode( preg_replace($match, $replace, utf8_decode($utf8_text));

This will however destroy any unicode character not existing within the ANSI charset. To avoid this you can always try using mb_ereg_replace which has multibyte (unicode) support:

string mb_ereg_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )

于 2012-04-12T18:34:43.860 回答
1

您可能面临字符串实际上没有正确 UTF-8 编码的情况(正如您所写的那样,但事实并非如此)。然后可能会使用替换字符html_entity_decode删除任何无效的 UTF-8 字节序列(例如 的单字节字符集编码)。Â

根据您使用的 PHP 版本,您可以通过使用标志来更好地控制如何处理这个问题。

此外,要查找您看不到的字符,请创建字符串的 hexdump

于 2012-04-12T18:30:06.017 回答