Более чем возможно, на это уже есть ответ, однако, поскольку кодирование далеко от моей сильной стороны, я не знаю, что искать, чтобы узнать.
По сути, у меня есть строка, которая содержит (что я бы назвал) «плохие» символы. Для контекста эта строка возвращается из ответа cURL. Пример:
$bad_str = "Sunday’s";
Вопрос: Как заменить их на более читаемые заменители?
Это было бы намного проще, если бы я знал, как называется эта проблема, или какой кодировке она соответствует. Я прочитал:
Я попытался создать карту свопов и запустить preg_replace_callback
на нем, т.е.
$encoding_swapouts_map = array(
'’' => "'",
'é' => 'é',
'–' => '-',
'£' => '£'
);
$bad_str = preg_replace_callback(
$ptn = '/'.implode('|', array_keys($encoding_swapouts_map)).'/i',
function($match) use ($encoding_swapouts_map) {
return $encoding_swapouts_map[$match[0]];
},
$str
);
Это не соответствует плохим персонажам, поэтому обратный вызов никогда не вызывается. Что интересно, $ptn
при распечатке показывает некоторую мутацию:
/’|é|–|£/i
Заранее спасибо.
Что случилось с ответом, который мне понравился? (было удалено).
Я думаю, что это опечатка, однако.
$text = "Sunday’s";
$bad = array("’","é","–","£");
$good = array("'","é","-","£");
$newtext = str_replace($bad, $good, $text);
Других решений пока нет …