PHP String反向无效

时间:2015-01-11 20:53:52

标签: php string reverse

我正在尝试将RTL的字符串反转为LTR。但也是倒转括号。 strrev确实有效,因为 它实际上不适用于UTF8字符串。所以我在下面写了一个自定义函数是我的代码

$str='תירס גדול A-10 (פרי גליל)';
function utf8_strrev($str)
{

    $arr = '';
    $words = explode(" ", $str);
    $start_tag = '(';
    $end_tag = ')';
    foreach ($words as $word)
    {
        if (preg_match("/\p{Hebrew}/u", $word))
        {
                preg_match_all('/./us', $word, $ar);
                echo print_r($ar[0]);
                echo '<br>';

                $arr = join('', array_reverse($ar[0])) . " " . $arr;
        } else
        {
            preg_match_all('/./us', $word, $ar);
            $arr = join('', $ar[0]) . " " . $arr;
        }
    }

    return $arr;
}

OUT PUT:

)לילג ירפ( A-10 לודג סרית 

应该是什么

(לילג ירפ) A-10 לודג סרית 

任何举行将不胜感激谢谢。

1 个答案:

答案 0 :(得分:2)

在KoenHoeijmakers发布的文档评论中找到此功能。我测试了它,但我不读希伯来语所以我很难判断它是否正常工作。

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

修改

在再次阅读您的问题的基础上,我认为这可以根据您的需要进行操作吗?

function utf8_strrev($str)
{

    $arr = '';
    $words = explode(" ", $str);
    $start_tag = '(';
    $end_tag = ')';
    foreach ($words as $word)
    {
        if (preg_match("/\p{Hebrew}/u", $word))
        {
                preg_match_all('/./us', $word, $ar);
                $arr = join('', array_reverse($ar[0])) . " " . $arr;
        } else
        {
            preg_match_all('/./us', $word, $ar);
            $arr = join('', $ar[0]) . " " . $arr;
        }
    }

    return preg_replace(array('/\)(.)/','/(.)\(/','/\}(.)/','/(.)\{/'),array('($1','$1)','{$1','$1}'),$arr);
}
$str='תירס גדול A-10 {פרי גליל}';

echo utf8_strrev($str);

Outut

{לילג ירפ} A-10 לודג סרית

同样,我不读希伯来语,但希望它能回答你的问题。

注意我使用preg_replace而不是str_replace的原因是因为字符串替换方法为我提供了( somthing something () something something )等问题文本