PHP 从 MySQL 数据库中解码带有百分号的字符
PHP decode characters with percent signs from MySQL database
我有一个 MySQL
数据库,其中 table 的 latin1_swedish_ci
排序规则有一个 text
字段,其中包含 %u013A
、Ok%20bro
和 %uD83D%uDE02%uD83D%uDE02
。我了解这些数据包含特殊字符,例如空格和表情符号。如何在PHP
中正确显示这些文本?我尝试了很多 PHP
函数,例如 url_decode()
和 utf8_encode()
都无济于事。请帮忙。
编辑:table 正在从 node js
服务器填充,该服务器在插入到 table 之前应用函数 escape()
。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape
我将 %20
识别为 space 在 URL 查询中使用。你需要 rawurldecode() 来解码。
我确实找到了 并且通过一些额外的代码我设法解码了你的代码:
function decodeEmoticons($src) {
$replaced = preg_replace("/\\u([0-9A-F]{1,4})/i", "&#x;", $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)));
这个returns“”。
所以也许您需要两次解码?首先是 rawurldecode()
,然后是上面的代码。需要进行一些试验,但我不能这样做,因为您没有提供大量的文本。
解决此问题的最佳方法是找出文本的编码方式。
我有一个 MySQL
数据库,其中 table 的 latin1_swedish_ci
排序规则有一个 text
字段,其中包含 %u013A
、Ok%20bro
和 %uD83D%uDE02%uD83D%uDE02
。我了解这些数据包含特殊字符,例如空格和表情符号。如何在PHP
中正确显示这些文本?我尝试了很多 PHP
函数,例如 url_decode()
和 utf8_encode()
都无济于事。请帮忙。
编辑:table 正在从 node js
服务器填充,该服务器在插入到 table 之前应用函数 escape()
。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape
我将 %20
识别为 space 在 URL 查询中使用。你需要 rawurldecode() 来解码。
我确实找到了
function decodeEmoticons($src) {
$replaced = preg_replace("/\\u([0-9A-F]{1,4})/i", "&#x;", $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)));
这个returns“”。
所以也许您需要两次解码?首先是 rawurldecode()
,然后是上面的代码。需要进行一些试验,但我不能这样做,因为您没有提供大量的文本。
解决此问题的最佳方法是找出文本的编码方式。