Спасибо за ответы, ребята. К сожалению, у представленных были следующие проблемы:
неправильно по очевидным причинам:
ereg_replace("[^A-Za-z0-9]", "", $string);
Это:
s/[\u00FF-\uFFFF]//
, который также использует устаревшую форму регулярного выражения ereg, также не работал, когда я конвертировал в preg, потому что диапазон был слишком велик для обработки регулярного выражения. Кроме того, в этом диапазоне есть отверстия, которые позволили бы мусору просачиваться.
Это предложение:
Это проблема кодирования; Вы не должны пытаться убрать этих поддельных персонажей, но должны понимать, почему вы получаете их зашифрованные.
хотя и действителен, но не годится, потому что я не контролирую, как кодируются получаемые мной данные. Это исходит из внешнего источника. Иногда там есть мусор, а иногда его нет.
Итак, решение, которое я нашел, было относительно грязным, но в отсутствие чего-то более надежного я просто принимаю все стандартные буквы, цифры и символы и отбрасываю остальные.
Кажется, сейчас это работает. Решение заключается в следующем:
$fixT = str_replace("£", "£", $string);
$fixT = str_replace("€", "€", $fixT);
$fixT = preg_replace("/[^a-zA-Z0-9\s\.\/:!\[\]\*\+\-\|\<\>@#\$%\^&\(\)_=\';,'\?\\\{\}`~\"]/", "", $fixT);
Если у кого-то есть идеи получше, я все равно хочу их услышать. Приветствия.