php - 删除 unicode 项目符号字符

标签 php mysql regex unicode

我遇到了一个我认为与 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/

相关文章:

php - 如何选择以 0 作为前缀的值,例如00-09

php - 运行 showdown.js 服务器端将 Markdown 转换为 HTML(在 PHP 中)

php - 在特定日期和时间在 Gearman 中安排工作

php - phpUnit 中的 createMock 和 getMockBuilder 有什么区别?

php - Dotenv\Dotenv::__construct() 不是 Dotenv\Loader 的实例

python - re.fullmatch() 可以消除正则表达式中对字符串 anchor 的需要吗

mysql - 将数据库中字符串中的所有字符替换为其他字符?

mysql - 每月计算结果并聚合的 Laravel 原始查询

mysql - 将 mysql 数据库从 linux 移动到 windows

c# - 使用平衡组的正则表达式