PHP 使用 MySQL 数据库中的百分号解码字符

问题描述

我有一个 MysqL 数据库,其中有一个 latin1_swedish_ci 归类表,其中有一个 text 字段,其中包含 %u013AOk%20bro 和 {{ 1}}。我了解这些数据包含特殊字符,例如空格和表情符号。如何在 %uD83D%uDE02%uD83D%uDE02 中正确显示这些文本?我尝试了许多 PHP 函数,例如 PHPurl_decode() 都无济于事。请帮忙。

编辑:表格是从 utf8_encode() 服务器填充的,该服务器在插入表格之前应用了函数 node jshttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape

解决方法

我将 %20 识别为 URL 查询中使用的空格。你需要 rawurldecode() 来解码。

我确实找到了 an answer to decode the other characters here 并且通过一些额外的代码我设法解码了你的代码:

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)));

这将返回“??”。

那么也许您需要两次解码?首先是 rawurldecode(),然后是上面的代码。需要进行一些实验,我不能这样做,因为您没有提供大量文本可供使用。

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