PHP 从 MySQL 数据库中解码带有百分号的字符

PHP decode characters with percent signs from MySQL database

我有一个 MySQL 数据库,其中 table 的 latin1_swedish_ci 排序规则有一个 text 字段,其中包含 %u013AOk%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() ,然后是上面的代码。需要进行一些试验,但我不能这样做,因为您没有提供大量的文本。

解决此问题的最佳方法是找出文本的编码方式。