9

我正在尝试制作一个代码来替换非阿拉伯语支持的程序
中支持的阿拉伯语文本,因为我需要在替换后反转文本,但它显示一些垃圾内容而不是想要的结果

这是代码:

<?php
$string = "اهلا بك";
echo "$string <br>";
$Reversed = strrev($string);
echo "<br><b>After Reverse</b><br><br>";
echo "<br> $Reversed";
?>

结果 :

اهلا بك

After Reverse


�٨� �؄ه٧

我需要它是它的方式,但颠倒?不是垃圾!!

4

4 回答 4

14

为了strrev()支持 UTF-8,你需要使用这个Function

function utf8_strrev($str){
    preg_match_all('/./us', $str, $ar);
    return join('', array_reverse($ar[0]));
}

所以我们要把代码中的 strrev() 改成 utf8_strev() :

$string = "اهلا بك";
echo "$string <br>";
$Reversed = utf8_strrev($string); // here we have changed it
echo "<br><b>After Reverse</b><br><br>";
echo "<br> $Reversed";

结果是:

اهلا بك

After Reverse


كب الها
于 2013-07-05T20:34:12.507 回答
2

处理所有编码的更通用的解决方案,不仅是 UTF-8:

function mb_strrev ($string, $encoding = null)
{
    if ( is_null($encoding) ) {
        $encoding = mb_detect_encoding($string);
    }

    $length   = mb_strlen($string, $encoding);
    $reversed = '';

    while ( $length-->0 ) {
        $reversed .= mb_substr($string, $length, 1, $encoding);
    }

    return $reversed;
}

感谢Kevin van Zonneveld

于 2018-08-16T06:50:02.500 回答
2

我一直在用这个

取自这里http://php.net/manual/en/function.strrev.php#122953

function mb_strrev($str){
    $r = '';
    for ($i = mb_strlen($str); $i >= 0; $i--) {
        $r .= mb_substr($str, $i, 1);
    }

    return $r;
}
于 2019-01-05T16:22:03.550 回答
-1
$my_string = 'Очень длинный-длинный текст :)'; 

function user_reverse($str){    // name can be arbitrary
   
    $arr = mb_str_split($str);
            
    return join('',array_reverse($arr));
 }

 echo (user_reverse($my_string));  // ): тскет йыннилд-йыннилд ьнечО*
于 2021-09-07T16:55:12.360 回答