[英]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;
它可以打印如下所示的人類可讀字符串。
通過這種方式,我可以向用戶顯示結果。 但是問題是我想以人類可讀的字符串存儲在數據庫中。 因此,我可以對該字符串進行其他操作。 所以我的問題是
要么
這是我很久以前問過的同一問題, 在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開始,您可以使用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.