У меня есть таблица MySQL с 120000 строк, хранящихся в формате UTF-8. Есть одно поле, название продукта, которое содержит текст с множеством акцентов. Мне нужно заполнить второе поле с тем же именем после преобразования его в форму, удобную для URL (ASCII).
Поскольку PHP напрямую не обрабатывает UTF-8, я использую:
$value = iconv ('UTF-8', 'ISO-8859-1', $value);
для преобразования имени в ISO-8859-1, за которым следует массивный оператор strstr для замены любого акцентированного символа его безударным эквивалентом (например, становится a).
Тем не менее, оригинальные текстовые имена были введены с умными кавычками, и iconv задыхается всякий раз, когда он сталкивается с одним - я получаю:
Unknown error type: [8]
iconv() [function.iconv]: Detected an illegal character in input string
Чтобы избавиться от умных кавычек перед использованием iconv, я попытался использовать три утверждения, такие как:
$value = str_replace('’', "'", $value);
(- это необработанное значение умной одинарной кавычки UTF-8)
Поскольку текстовый файл очень длинный, эти str_replace приводят к тому, что время ожидания скрипта истекает каждый раз.
Какой самый быстрый способ вырезать умные кавычки (или любые недопустимые символы) из строки UTF-8 перед запуском iconv?
Или, есть ли более простое решение всей этой проблемы? Какой самый быстрый способ преобразовать имя с множеством акцентов в UTF-8 в имя без акцентов, написанное правильно, в ASCII?