删除unicode项目符号

时间:2012-12-20 17:03:05

标签: php mysql regex unicode

我遇到了一个我认为与unicode文本有关的问题。当用户输入具有unicode项目符号字符的字符串时,mysql无法保存该字段(尽管更新查询的其余部分仍可正常工作)。以下是我一直试图解决的问题。

$str = "· Close up the server";

$str = preg_replace("\u2022", "•", $str);

......但是这仍然不起作用。

2 个答案:

答案 0 :(得分:4)

这里有很多东西可能出错,因为数据库,表单提交和源代码字符串文字都涉及到了。我假设您要使用UTF-8,因为使用任何其他典型编码(CP1252,Latin1)时,如果您想使用json_或接受超过200个不同的字符,您将被搞砸。

要做的第一件事是删除任何类型的转换等代码,其目的是尝试修复编码问题。例如utf8_encodehtmlentitites*_replace ..无论如何。


来源编码。

$str = "· Close up the server";

编写上述内容时,PHP源文件需要以UTF-8进行物理编码。如果您使用的是Windows,则必须明确执行或配置此操作。 UTF-8不会在Windows上神奇地发生。


表格提交

当用户提交表单时,有效负载将采用您声明页面的任何编码。您可以这样声明:

header("Content-Type: text/html; charset=utf-8");

但是任何人都可以实际向服务器提交任意字节,因此您应该在继续之前验证输入是否为UTF-8。 mb_check_encoding很好。


数据库

由于此时您的数据以UTF-8格式输入,因此您的输入字符串为UTF-8。您必须在连接到数据库后通过指定连接编码来指定它。

mysql_set_charset("utf8"); //After making the connection, and before any queries
//or $mysqli->set_charset( "utf8");

这使得数据库以UTF-8读取您的输入,并以UTF-8编码其输出。您还希望将列/表/数据库设置为UTF-8。


PHP不支持Unicode转义序列\uxxxx\uhhhh\ullll\Uxxxxxxxx

答案 1 :(得分:2)

\u2022是“Bullet”的UTF-16十六进制编码。不是UTF-8

在打开数据库之前,您可能还需要SET NAMES 'UTF-8';或更改字符集。