从Web表单输入清除PHP字符串

时间:2009-12-01 18:12:13

标签: php validation forms formatting character-encoding

我有一个获取客户信息的网络表单。使用PHP 5.1.6处理表单,因此使用filter_input()将不起作用。

表单包含文本区域以及其他一些标准字段。我收到了很多奇怪的格式代码,这些代码存储在我们的MySQL数据库中。如何从字符串中获取格式来过滤这些结果?


婴儿的房间在哪里?我觉得它在房子的北边。你知道它在哪里吗?

之后(这是我想看到的)
宝宝的房间在哪里?我认为它在房子的北边。你知道它在哪里吗?

3 个答案:

答案 0 :(得分:1)

他们正在向您的数据库发送utf8字符串,您的数据库可能正在等待拉丁语。首先确保您的表设置为utf8,如果未将其设置为utf8。然后尝试先运行此查询:

set names utf8

这会将连接的charset设置为utf8。然后,您可以运行其他查询。

阅读本文:

http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

答案 1 :(得分:1)

这几乎可以肯定是因为有人从一个无法复制的字符集中剪切和粘贴。

最好的猜测,他们是从Microsoft Word那里使用非ASCII unicode符号作为引号和语音标记,而不是普通友好的ASCII符号。 UTF-8编码为来自80-FF的一系列两个或更多字节,但通常将网页设置为“latin-1”,将这些字节视为单个字符,通常是带重音的a-z。如果你看到2或3个字符,你会期望一个,其中一些是带有重音符号的怪异拉丁符号,它几乎总是意味着你的数据是utf-8但它是由拉丁语呈现的-1

例外情况是它首先以utf-8和系统预期 latin-1的形式输入。确保HTML表单明确设置字符类型。

一般情况下,我建议您使用“utf-8”制作所有基于网络的工具,而不是没有充分的理由。

更新:这有点icky,但我建议你不要太担心数据库字符集。真的我们应该默认使用utf-8,但是如果你把utf-8数据放到一个latin-1表中,那么返回的内容仍然是utf-8,只要没有任何东西问数据库它认为它发送给你的是什么。我所说的是MySQL不太可能导致问题。它可以是剪切和粘贴,浏览器,Web表单,从表单中读取和写入数据库的代码,也可能是从db读取和呈现HTML的代码。

尝试使用iffy chars检查页面的字符编码。尝试将其设置为utf-8或在浏览器中强制使用utf-8。在Firefox中查看 - >字符编码。

答案 2 :(得分:0)

在阅读你的帖子后,我唯一可以告诉你的是检查你的表格标签并将“accept-charset”属性添加到你想要的值。

由于这是您从表单发布的数据的问题,因此您可能需要检查它。

如果在数据库表中存储数据后出现此问题,则可能需要检查数据库表字符串collat​​ions / charsets。