2010-02-19 123 views
4

编辑:php删除/标识此符号

好吧我有一些数据(大量的数据)从MySQL数据库表中取出,没有什么特别的数据输入方式。解析数据并将其重新显示到Firefox时,此符号会显示出来。当我将它与数据库条目进行比较时,它看起来像一个空间(没什么特别的)。我正在使用所有默认的PHP/MySQL设置。

做一个var_dump或print_r也没有帮助。

有什么想法?

的符号:

UPDATE:

好吧,我确实发现导致问题的

人物 -

不要与

混淆 -

(连字符)。

+16

它就在那里!去掉它!! – Jasarien 2010-02-19 17:12:13

+0

@Jasarien你是一个有趣的人 – 2010-02-19 17:13:42

+1

它可能是U + FFFC或U + FFFD,意思是你在某处有编码问题? – jball 2010-02-19 17:14:25

回答

12

字符REPLACEMENT CHARACTER (U+FFFD)。当有一个UTF码中的错误它是用来:

FFFD替换字符

  • 用于代替进入的字符,它的值是以Unicode
未知的或不可表示

在大多数情况下,这意味着某些数据会使用UTF编码进行解释,而数据不是使用该编码进行编码,而是使用其他编码进行编码。

+0

非常好,谢谢你的确认,但我该如何删除它? str_replace和preg_match不起作用 – 2010-02-19 17:22:52

+1

@Phill Pafford:这个字符表示你的字符编码有问题。解决这个问题,你的角色应该正确显示。 – Gumbo 2010-02-19 17:24:00

+1

@gumbo超过100000条记录,少于1%以这种方式显示。我只是希望能够验证符号并从字符串中删除,但目前为止没有任何工作,思路? – 2010-02-19 17:28:56

0

一个非常模糊的问题。不知何故,检查你的网站的编码,你的数据库的数据编码等等。

编辑:这是一个答案,因为缺陷是DB数据编码(可能在utf-8)和webapp编码(可能在iso-8859-1)之间不匹配。因此,该解决方案通过以下任一方式进行:

1.)备份并擦除数据库,然后使用正确的编码加载它 2.)更改webapp的编码,以便正确显示字符。

问候,

+1

没有答案。你应该评论。 – Layke 2010-02-19 17:18:04

+0

@edit超过100000条记录,少于1%以这种方式显示。我只是想能够验证符号和删除是从字符串,但没有任何工作到目前为止 – 2010-02-19 17:27:20

+1

你可能不会找到它。作为Gumbo的州,它是您的浏览器使用的替代字符,用来指出一个它无法理解的字符的问题。因此,用错误标识具体数据并在数据库中获取。检查它的保存方式 – Alfabravo 2010-02-19 17:36:15

1

这意味着一个字符,不可用在设置的当前字体的字符。一旦你找到它来自哪里,你就需要用HTML实体对它进行编码。

1

该字符表示存在您的浏览器不知道如何显示的代码点。某处您将字符值设置为正常可打印字符范围之外的内容,并且您的浏览器通过显示标准“未知”字符来告诉您。

解决问题的唯一方法是找到将无效字符放入字符串中的错误。

0

你在说什么?你在哪里看到这个?如果它在浏览器上的呈现页面上,那么你可能已经用不正确的编码保存了该文件。保存页面/源文件时使用UTF或unicode编码。

1

将文本从Microsoft Office产品粘贴到HTML或数据库时,这是一个常见问题。最大的违规者似乎是模特(你发现)和聪明的报价。我发现,当用户坚持使用不兼容的文本编辑器时,我发现一种解决方案是先将它们粘贴到记事本之类的东西中,以去除专有符号。

显然,最好的解决方案就是不要使用单词作为网页显示的文本数据。

添加只是为了向未来的读者提供一些信息。

问候, 的Jc

+0

感谢这个解释很多 – 2010-02-19 20:46:54

1

你可以看看的iconv()和MB_ *功能,如果你只是想清理数据。

其他地方观察到的最可能的原因是您在字符编码方面存在问题。在版本6之前,PHP并不擅长处理字符编码(处理字节数组并将编码问题留给开发人员处理)。

确保您使用与数据库相同的字符编码显示页面,并确保在将其粘贴之前将所有用户输入转换为相同的字符编码(iconv()和mb_detect_encoding()将有所帮助)数据库。

+0

谢谢这很有趣,将不得不尝试这个 – 2010-02-19 20:47:27

0

为什么不在JavaScript中针对Gumbo在呈现网页后识别为“...字符⋯...替换字符(U + FFFD)”的正则表达式 - 通过这种方式,您不必乱用数据库(你似乎很不情愿这么做),并且任何小的性能损失都会被卸载到客户端。