Функция str_replace() работает некорректно

152
02 февраля 2022, 20:20
function translitlot_kir($value){
    $converter = array(
'o‘'=>'ў','O‘'=>'Ў',' E'=>' Э','E'=>' Э','Ya'=>'Я','Yu'=>'Ю','Yo'=>'Ё','yo'=>'ё','G‘'=>'Ғ','Ch'=>'Ч','Sh'=>'Ш','ʼ'=>'ъ',' e'=>' э','ya'=>'я','yu'=>'ю','ye'=>'е','’'=>'ъ','g‘'=>'ғ','ch'=>'ч','sh'=>'ш','A'=>'А','B'=>'Б','C'=>'С','D'=>'Д','F'=>'Ф','G'=>'Г','H'=>'Ҳ','I'=>'И','J'=>'Ж','K'=>'К','L'=>'Л','M'=>'М','N'=>'Н','O' => 'О','P'=>'П','Q'=>'Қ','R'=>'Р','S'=>'С','T'=>'Т','U'=>'У','V'=>'В','W'=>'В','X'=>'Х','Y'=>'Й','Z'=>'З',
'a'=>'а','b'=>'б','c'=>'с','d'=>'д','e'=>'е','f'=>'ф','g'=>'г','h'=>'ҳ','i'=>'и','j'=>'ж','k'=>'к','l'=>'л','m'=>'м','n'=>'н','o'=>'о','p'=>'п','q'=>
'қ','r'=>'р','s'=>'с','t'=>'т','u'=>'у','v'=>'в','w'=>'в','x'=>'х','y'=>'й','z'=>'з',
'[br]' => '<br>',
'<p>' => '<p>','</p>' => '</p>',
'<i>' => '<i>','</i>' => '</i>',
'<u>' => '<u>','</u>' => '</u>',
'<ul>' => '<ul>','</ul>' => '</ul>',
'<li>' => '<li>','</li>' => '</li>',
'<em>' => '<em>','</em>' => '</em>',
'<strong>' => '<strong>','</strong>' => '</strong>',
'<code>' => '<code>','</code>' => '</code>',
    );
    $value = str_replace(array_keys($converter),array_values($converter),$value);
    return $value;
}

В этот код работает частично, буквы меняются, но коды не меняются.

Например: '[br]' => '<br>'. Это не изменилось, и эти тоже '<p>' => '<p>','</p>' => '</p>'.

Вот еще пример с сайта: текст "Quyidagi ishlar tahoratda makruhi tanzihiy hisoblanadi:[br]" изменило на "Қуйидаги ишлар таҳоратда макруҳи танзиҳий ҳисобланади:[бр]". А если вместо "[br]" я пишу "<br>", резултат будет "<бр>"

Подскажите, в чем проблема?

Answer 1

Вот что происходит. Есть замены

'b'=>'б',
'r'=>'р',
'[br]' => '<br>',

Функция делает замены по порядку, поэтому получается [br] => [бр] : сработали первые две замены, а до третьей замены дело не дошло.

Надо разделить замены для тегов типа '[br]' => '
', и для текста 'b'=>'б'. Сначала делать замены для тегов, а потом сделать замены для текста, не трогая теги.

Первое делается обычным str_replace, а вот второе сделать сложнее. Например, можно "откусывать" по одному символу из строки и считать сколько было "<" и ">". Если кол-во "<" и ">" одинаково, то мы в тексте и можно производить замену данного символа, иначе символ переносим как есть, без изменений.

READ ALSO
Загрузка изображения на сервер по ссылке

Загрузка изображения на сервер по ссылке

Решил попробовать написать свой парсер для сайта и столкнулся с небольшой проблемойНу, начну с того, что парсер работает, он отлично собирает...

98
Что использовать/делать/учить? [закрыт]

Что использовать/делать/учить? [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме

195
PHP. Передача данных из неординарных тегов

PHP. Передача данных из неординарных тегов

Могу ли я передать данные находящиеся между тегами <h1></h1> придав имя =>

124
Проблема с безопасностью в Wordpress

Проблема с безопасностью в Wordpress

Возникла проблема с целым хостингом на котором стоит несколько сайтовВ файлах index

94