簡體   English   中英

在PHP中將Unicode字符轉換為人類可讀的字符串

[英]Convert Unicode characters to human readable string in PHP

我在php中將Unicode字符轉換為人類可讀文本時遇到問題。

我有如下字符串的unicode字符

$chars = "\u1006\u1092\u1019\u1021\u102c\u101b\u1036\u102f \u1019\u1002\u1062\u1007\u1004\u1039\u1038 (\u1042\u1040\u1041\u1046 \u1007\u1030\u101c\u102d\u102f\u1004\u1039)";

如果我這樣回應

echo $chars

它不會轉換為人類可讀的字符串。 但是如果我這樣回應

$text = '<script type="text/javascript">
document.write("\u1006\u1092\u1019\u1021\u102c\u101b\u1036\u102f \u1019\u1002\u1062\u1007\u1004\u1039\u1038 (\u1042\u1040\u1041\u1046 \u1007\u1030\u101c\u102d\u102f\u1004\u1039)");
</script>';

echo $text;

它可以打印如下所示的人類可讀字符串。

在此處輸入圖片說明

通過這種方式,我可以向用戶顯示結果。 但是問題是我想以人類可讀的字符串存儲在數據庫中。 因此,我可以對該字符串進行其他操作。 所以我的問題是

  1. 如何在PHP中將Unicode字符轉換為人類可讀的字符串?

要么

  1. 如何將第二種方法中的JavaScript結果分配給php中的字符串?

這是我很久以前問過的同一問題, 在PHP中將Unicode字符轉換為文本不起作用

您可以使用/\\\\\\\\u([0-9a-f]{4})/iu正則表達式來匹配\\uXXXX表示\\uXXXX字符串,以將數字捕獲到組1中,稍后將在匿名函數preg_replace_callback使用該字符串來pack數據轉換為二進制字符串。 由於我們將十六進制值傳遞給pack函數,因此第一個參數-格式字符-應該為H

H六角弦,高位優先

看一個PHP演示

$chars = "\u1006\u1092\u1019\u1021\u102c\u101b\u1036\u102f \u1019\u1002\u1062\u1007\u1004\u1039\u1038 (\u1042\u1040\u1041\u1046 \u1007\u1030\u101c\u102d\u102f\u1004\u1039)";
$encoding = ini_get('mbstring.internal_encoding');
$str = preg_replace_callback('/\\\\u([0-9a-f]{4})/iu', function($match) use ($encoding) {
        return mb_convert_encoding(pack('H*', $match[1]), $encoding, 'UTF-16BE');
    }, $chars);
echo $str;

您可以使用intl / Transliterator類:

$out = transliterator_create('Hex-Any')->transliterate($chars);
var_dump($out);

內置的轉換器Hex-Any處理\\ uXXXX和\\ UXXXXXXXX序列的轉義。

我不知道它是否與您的情況有關,但是,自PHP 7.0.0起,您可以這樣編寫$ chars:

$chars = "\u{1006}\u{1092}\u{1019}\u{1021}\u{102c}\u{101b}\u{1036}\u{102f} ...";

PHP 7+

從PHP 7開始,您可以使用Unicode代碼點轉義語法來執行此操作。

echo "\\u{1006}\\u{1092}\\u{1019}\\u{1021}\\u{102c}\\u{101b}\\u{1036}\\u{102f} \\u{1019}\\u{1002}\\u{1062}\\u{1007}\\u{1004}\\u{1039}\\u{1038}";

輸出

ဆ႒မအာရံု မဂၢဇင္း

這是否回答你的問題 ?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM