首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 解碼 Unicode 編碼中文字串:preg_replace_callback 與 JSON 兩種方案

     編輯:PHP 綜合知識

問題背景

爬蟲或 API 回傳資料中常見 \u65b0\u6d6a\u5fae\u535a 這類 Unicode 轉義序列,需還原為中文「新浪微博」。

方案 A:preg_replace_callback + pack/mb_convert_encoding(推薦,穩定)

function replace_unicode_escape_sequence($match) {
    return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}
$name = '\u65b0\u6d6a\u5fae\u535a';
$str = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $name);
echo $str; // 輸出:新浪微博

封裝為工具類

class Helper_Tool {
    static function unicodeDecode($data) {
        return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', function($m) {
            return mb_convert_encoding(pack('H*', $m[1]), 'UTF-8', 'UCS-2BE');
        }, $data);
    }
}
echo Helper_Tool::unicodeDecode('\u65b0\u6d6a\u5fae\u535a'); // 新浪微博

方案 B:json_decode 技巧(次推薦,有限制)

function unicodeDecode($name) {
    $json = '{"str":"' . $name . '"}';
    $arr = json_decode($json, true);
    return empty($arr) ? '' : $arr['str'];
}
echo unicodeDecode('\u65b0\u6d6a\u5fae\u535a'); // 新浪微博

⚠️ 重要限制

輸入字串 不能包含單引號,否則 JSON 結構會破壞導致解析失敗。若來源不可控,需先 str_replace("'", "\\'", $name) 轉義。

比較總結

維度方案 A方案 B
穩定性高,無特殊字元限制中,需預處理單引號
效能略優略慢(JSON 編解碼)
適用場景通用、生產環境推薦快速測試、可控輸入
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved