Реверс PHP-строки не работает

я пытаюсь обратить строку для 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 לודג סרית

Любая задержка будет оценена Спасибо.

1

Решение

Нашел эту функцию в комментариях к документам, которые разместил 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 )

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]