В приведенном ниже коде я пытаюсь заменить турецкие специальные символы, такие как «ğ, ş, ç» на «g, s, c». Когда я пытаюсь преобразовать внутреннюю строку, это нормально. но когда я пытаюсь преобразовать опубликованную строку, ничего не меняется. Вот код:
<?php
$meslek0=$_POST['meslek'];
$internal='ş';
echo '<br>internal original: '.$internal;
echo '<br>posted original: '.$meslek0;
echo '<br>posted after decode: '.$meslek0;
$meslek0=replace_tr($meslek0);
$internal=replace_tr($internal);
echo '<br>internal converted:'.$internal;
echo '<br>posted converted:'.$meslek0;function replace_tr($text) {
$text = trim($text);
$search = array('Ç','ç','Ğ','ğ','ı','İ','Ö','ö','Ş','ş','Ü','ü',' ');
$replace = array('c','c','g','g','i','i','o','o','s','s','u','u','-');
$new_text = str_replace($search,$replace,$text);
return $new_text;
}?>
Я думаю, что эти символы в UTF-8. Стандартные функции String в PHP не предназначены для символов с длиной более 1 байта.
На PHP.net, кто-то предложил эту функцию:
function mb_str_replace($needle, $replacement, $haystack) {
return implode($replacement, mb_split($needle, $haystack));
}
Использование этого вместо str_replace () должно работать
Других решений пока нет …