我正在尝试将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 לודג סרית
任何举行将不胜感激谢谢。
答案 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);
{לילג ירפ} A-10 לודג סרית
同样,我不读希伯来语,但希望它能回答你的问题。
注意我使用preg_replace
而不是str_replace
的原因是因为字符串替换方法为我提供了( somthing something (
或) something something )
等问题文本