我遇到了一个我认为与 unicode 文本有关的问题。当用户输入具有 unicode 项目符号字符的字符串时,mysql 无法保存该字段(尽管更新查询的其余部分有效)。这就是我一直在尝试处理它的方式。
$str = "· 关闭服务器";
$str = preg_replace("\u2022", "•", $str);
...但是这仍然不起作用。
最佳答案
这里有很多事情可能出错,因为数据库、表单提交和源代码字符串文字都涉及到。我假设您想使用 UTF-8,因为对于任何其他典型编码(CP1252、Latin1),当您想使用 json_
或接受超过 200 个不同的字符时,您会被搞砸。
要做的第一件事是删除任何类型的转换等代码,这些代码是为了尝试修复编码问题而编写的。比如 utf8_encode
, htmlentitites
, *_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
。
关于php - 删除 unicode 项目符号字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13977057/