я пытаюсь обратить строку для RTL в LTR. но меняются квадратные скобки. Стррев работал, потому что
на самом деле это не работает для строки 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;
}
ВЫХОД :
)לילג ירפ( A-10 לודג סרית
что это должно быть
(לילג ירפ) A-10 לודג סרית
Любая задержка будет оценена Спасибо.
Нашел эту функцию в комментариях к документам, которые разместил 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 )
Других решений пока нет …