输入中的清洁表情符号

Clean emoji in input

如何清除我的表单输入中的表情符号等字符?例如,当我 post 文本区域中的一个段落带有这样的表情符号时,记录不会插入到数据库中。我无法将我的数据库 table 更改为 utf8mb。现在是utf8。我尝试了以下功能,但其中 none 有效。

$str = iconv('UTF-8', 'UTF-8//IGNORE', $str);
$str = utf8_encode($str);
$str = mb_convert_encoding ($str, "UTF-8");
$str = htmlspecialchars ($str);
$str = htmlspecialchars ($str, ENT_SUBSTITUTE, 'UTF-8');
$str = htmlspecialchars ($str, ENT_SUBSTITUTE);

json_encode($str) 确实将表情符号更改为“\UXXXX”之类的东西,但它将所有输入用双引号括起来,我必须为每个输入解码它。

要清楚是否有人输入 "hello world " 我想将以下内容之一保存到数据库中: 你好世界或 你好世界 :-) 或 你好世界:微笑:

据我所知,您的数据库字符集需要 utf8mb4

查看 and 了解更多信息。

您可以使用 iconv:UCS2 字符集仅支持 basic multilingual plane——就像 mysql 版本的 "utf8"——所以做一个通过 UCS2 的往返将删除所有表情符号,同时保留大多数现代语言中的大多数字符。

$s = "hello world ";
$s = iconv("ucs2", "utf8", iconv("utf8", "ucs2//IGNORE", $s))
var_dump($s); // string(12) "hello world "