Здравствуйте. Сайт работает в кодировке Windows-1251, в том числе и соединение с базой MySQL. Все файлы сохранены в Windows-1251.
Появилась необходимость сделать замену слов в строке, с помощью str_replace
.
Замена обычных символов, типа
str_replace("Слово", "Замена", $str);
работает хорошо.
Но возникла проблема при замене слова на слово с символами юникода.
Как только я прописал
str_replace("Слово", "кοᴛοᴘыᴇ", $str);
редактор кода выдал сообщение:
сохранил файл в UTF-8, но замена слова не произошла в строке, осталось прежнее слово Слово
.
Что можно сделать?
Я протестировал этот код у себя и это у меня сработало:
$str = "Слово";
echo "<p>$str</p>"; // Слово
$str = str_replace("Слово", "кοᴛοᴘыᴇ", $str);
echo "<p>$str</p>"; // Результат: которые
Но у меня есть и другой функция для вас чтобы заменить ключ в значение в ассоциативном массиве. Вот пример функции и использование:
function replaceKeyToValue($request, $dict){
$response = preg_replace_callback("/\pL+/u", function ($m) use ($dict) {
$word = mb_strtolower($m[0]);
if (isset($dict[$word])) {
$repl = $dict[$word];
if ($word === $m[0]) return $repl;
if (mb_strtoupper($word) === $m[0]) return mb_strtoupper($repl);
if (mb_convert_case($word, MB_CASE_TITLE) === $m[0]) return mb_convert_case($repl, MB_CASE_TITLE);
for ($i = 0, $len = mb_strlen($word); $i < $len; ++$i) {
$mixed[] = mb_substr($word, $i, 1) === mb_substr($m[0], $i, 1)
? mb_substr($repl, $i, 1)
: mb_strtoupper(mb_substr($repl, $i, 1));
}
return implode("", $mixed);
}
return $m[0];
}, $request);
return $response;
}
$array = array
(
'слово' => 'которые'
);
$str = "слово Слово СЛОВО";
echo replaceKeyToValue($str, $array);
которые Которые КОТОРЫЕ
То есть функция выводит ответ в том регистре в каком он и написано в входном тексте. Но не работает если вы например будете использовать разные регистры: "СлОвО слОВО СлоВо"
Поэтому рекомендуется использовать или нижний или верхний или начало с верхним а далее с нижним регистром "слово СЛОВО Слово"
ЗдравствуйтеЕсть скрипт xCharts для реализации графика ссылка на исходники
Вопрос заключается в следующемНастряпал код который перемножает цену товара на определенный курс, по заданному признаку и записывает новую...