如何在PHP中将Unicode转换为阿拉伯字符?

4

假设我们有一个字符串

$uni_str="06280628002006280628";

在阿拉伯语中,它是:بب بب。
那么,如何在不使用HTML的情况下将其转换为PHP呢?
    for($i=0; $i<strlen($uni_str); $i+=4)
    {
        $text_str .= "&#x".substr($uni_str,$i,4).";";
    }

这段代码只是解决了在HTML页面上查看结果的问题,

但我想把结果放到PHP变量中。

因为上面代码的结果类似于

&#x0628;&#x0628;&#x0020;&#x0020;&#x0628;&#x0628;

$php_str .= 0x0628;? - Marc B
@user1372074,你想在PHP字符串中加入 بب بب 吗? - Sabari
这个解决方案对我在WordPress上起作用: https://stackoverflow.com/a/61580555/1770571 - Salma Gomaa
3个回答

3
我找到了解决方案,希望能帮到您:
function uni2arabic($uni_str) 
{   
      for($i=0; $i<strlen($uni_str); $i+=4)
         {
                $new="&#x".substr($uni_str,$i,4).";"; 
                $txt = html_entity_decode("$new", ENT_COMPAT, "UTF-8");
                $All.=$txt;
         }

    return $All;
} 

变量$All包含阿拉伯字符串


1
使用hex2bin将十六进制解码为字节序列,然后您可以将每对字节解压缩为一个UTF-16代码单元(这是我假设您的字符串表示的内容)。
假设您正在生成UTF-8文本输出:
iconv('UTF-16BE', 'UTF-8', hex2bin('06280628002006280628'))

0

以下代码允许您解码字符并在必要时重新编码它们

代码

if (!function_exists('codepoint_encode')) {

    function codepoint_encode($str) {
        return substr(json_encode($str), 1, -1);
    }

}

if (!function_exists('codepoint_decode')) {

    function codepoint_decode($str) {
        return json_decode(sprintf('"%s"', $str));
    }

}

如何使用

header('Content-Type: text/html; charset=utf-8'); 

var_dump(codepoint_encode('ඔන්ලි'));
var_dump(codepoint_encode('සින්ග්ලිෂ්'));

var_dump(codepoint_decode('\u0d94\u0db1\u0dca\u0dbd\u0dd2'));
var_dump(codepoint_decode('\u0dc3\u0dd2\u0db1\u0dca\u0d9c\u0dca\u0dbd\u0dd2\u0dc2\u0dca'));

输出

string(30) "\u0d94\u0db1\u0dca\u0dbd\u0dd2"
string(60) "\u0dc3\u0dd2\u0db1\u0dca\u0d9c\u0dca\u0dbd\u0dd2\u0dc2\u0dca"
string(15) "ඔන්ලි"
string(30) "සින්ග්ලිෂ්"

如果您需要更复杂的功能,请参阅如何在PHP中获取Unicode代码点的字符?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接