Как я исправляю этот PHP-скрипт?
Этот скрипт "нечувствителен", и когда я ввожу" грушу "в ответ, он дает неправильный результат"ученик". Хо сделать работу правильно и преобразовать результат в UTF-8? Когда я войду " Саша"
в ответ я даю результат "??????", а не " Михаил"
$data = 'Олег Саша Тимур they are students'; $search = array("they are","Олег","Саша","pear"); $replace = array("the're","Коля","Михаил","pupil"); $arr = array_combine($search, $replace); $pat = '/\b(?:' . implode("|", array_keys($arr)) . ')\b/i'; $data = preg_replace_callback($pat, function($matches) use ($arr) { $i=0; return !empty($arr[strtolower($matches[0])]) ?join('',array_map(function($char) use ($matches, &$i) { return ctype_lower($matches[0][$i++])?strtolower($char):strtoupper($char); }, str_split($arr[strtolower($matches[0])]))) : $matches[0]; }, $q); echo $data;
Что я уже пробовал:
$data = 'Олег Саша Тимур they are students'; $data = mb_convert_encoding($data, "UTF-8"); $search = array("they are","Олег","Саша","pear"); $replace = array("the're","Коля","Михаил","pupil"); $search = array_map("utf8_encode", $search); $replace = array_map("utf8_encode", $replace); $arr = array_combine($search, $replace); $arr = array_map("utf8_encode", $arr); $pat = '/\b(?:' . implode("|", array_keys($arr)) . ')\b/i'; $data = preg_replace_callback($pat, function($matches) use ($arr) { $i=0; return !empty($arr[mb_strtolower($matches[0])]) ?join('',array_map(function($char) use ($matches, &$i) { return ctype_lower($matches[0][$i++])?mb_strtolower($char):mb_strtoupper($char); }, str_split($arr[mb_strtolower($matches[0])]))) : $matches[0]; }, $q); $data = mb_convert_encoding($hint, "UTF-8"); echo $data;