PHP过滤非标准字符

时间:2009-06-21 12:24:24

标签: php javascript utf-8

我将文本作为用户输入,文本中的某处没有标准字符。

文本存储在数据库中。一切都是UTF-8,它运行良好,只显示非标准字符的奇怪标志。

如何在PHP中过滤这些字符?


我发现带有错误字符的文本“正确”存储在数据库中。当文本显示在静态UTF-8编码的HTML页面上时,将显示损坏的字符。但是当文本通过AJAX加载时,它崩溃并且加载操作失败。所以我认为这仍然是一个AJAX编码问题。

6 个答案:

答案 0 :(得分:2)

Unicode(以及像UTF-8这样的编码)包含的字符比大多数操作系统可以显示的字符数多,这只是因为典型的用户不需要每个可用的字符。

这可能意味着您的某个用户拥有他们在系统中拥有的输入字符,但您没有使用您的系统; UTF-8并不关心你能看到什么,只关心它需要存储什么。例如,如果某人有像PaulErdős这样的匈牙利名字(注意O上的时髦斜线),那么这个角色可能并非在所有系统上都可用。

正如另一个答案所说,您可能需要追踪这些符号的来源,以便了解您的客户是否真的需要显示它们,或者您需要将它们转换为其他符号。

答案 1 :(得分:0)

这些“奇怪的字符”可能来自错误的字符编码(用户输入不是UTF-8编码),也可能来自用于表示这些字符的字体中缺少的字形。

所以你应该首先找到这些“奇怪人物”的真正原因。

答案 2 :(得分:0)

我在PHP中使用一组函数来检查,转换和修改字符为UTF-8。很久以前我从网上的某个地方获得了这些功能,所以很遗憾不能为他们带来任何好处,但希望他们有所帮助。

PHP functions for converting characters around about UTF-8

答案 3 :(得分:0)

你使用什么样的AJAX,以及使用哪个库?您是否加载XML文件或HTML文件以显示或仅加载div.innerHTML = myRequestetContent的简单字符串?

如果您使用XML,那么您可能会遇到不同的问题:XML声明中没有字符集(因此错误的字符)和非转义的xml实体,例如&或者<或者>这可能会使您的XML无效,因此可能会破坏AJAX功能。

前者可以通过在xml文件中添加正确的字符编码来修复,如<?xml version="1.0" encoding="UTF-8">,后者在PHP中添加htmlspecialcharacters

答案 4 :(得分:0)

您绝对应该考虑更改AJAX响应页面,以使用CDATA将数据作为XML格式的结果返回。然后我很确定你安全回家。

如果您不确定CDATA是什么,请查看此处:http://en.wikipedia.org/wiki/Cdata

使用PHP的XMLWriter对象查看此示例:http://php.net/xmlwriter_write_cdata

答案 5 :(得分:-1)

使用功能:

$htmlEntitiesString = htmlentities($inputString);

它会将所有像éíä等字符转换为HTML实体,确保您不会遇到像'é'变成'Á@'之类的问题。