我有一个带有latin1_swedish_ci
排序规则表的MySQL
数据库,该数据库有一个包含%u013A
、Ok%20bro
和%uD83D%uDE02%uD83D%uDE02
等文本的text
字段。据我所知,这些数据包含空格和表情符号等特殊字符。如何在PHP
中正确显示这些文本?我尝试过许多PHP
函数,如url_decode()
和utf8_encode()
,但都没有成功。请帮忙。
编辑:表是从node js
服务器填充的,该服务器在插入到表之前应用函数escape()
。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape
我将%20
识别为URL查询中使用的空间。你需要rawurldecode()来解码它。
我确实在这里找到了解码其他字符的答案,通过一点额外的代码,我成功地解码了你的:
function decodeEmoticons($src) {
$replaced = preg_replace("/\\u([0-9A-F]{1,4})/i", "&#x$1;", $src);
$result = mb_convert_encoding($replaced, "UTF-16", "HTML-ENTITIES");
$result = mb_convert_encoding($result, 'utf-8', 'utf-16');
return $result;
}
$r = "%uD83D%uDE02%uD83D%uDE02";
echo decodeEmoticons(str_replace('%','\',strtolower($r)));
这返回"0"&";。
也许你需要两个装饰?首先是rawurldecode()
,然后是上面的代码。需要做一些实验,但我做不到,因为你没有给出很多文本。
最好的方法是找出文本是如何编码的。