Я очень благодарен за помощь. Я потратил дни на эту проблему, и ни одно из предложений, которые я нашел в Интернете, похоже, не дает мне исправить.PHP - Не удается удалить странный символ
У меня есть файл CSV от поставщика. Кажется, он был экспортирован из системы Microsoft.
Я использую PHP для импорта данных в MySQL (обе последние версии).
У меня есть одна конкретная запись, которая содержит странный символ, от которого я не могу избавиться. Ручное редактирование, чтобы удалить символ, возможно, но я бы предпочел автоматическое решение, так как это произойдет несколько раз в день.
Символ представляется интерпретацией «умной цитаты». Шестигранный редактор сообщает мне, что коды символов - C2 и 92. В шестнадцатеричном редакторе это выглядит как странный A, за которым следует умная цитата. В других редакторах, Calc, Writer и т. Д. Это просто окно.メ
Я использую mb_detect_encoding для определения кодировки. Все записи в CSV-файле возвращаются как ASCII, кроме символа со странным символом, который возвращается как UTF-8. Я могу вставить запись о нарушении в MySQL, и она просто появляется в Workbench как квадрат.
Таблицы MySQL настроены на utf-8 – utf8_unicode_ci
и другие необычные символы UTF (например, фракции) в порядке.
Я пробовал много решений этого ...
- How to detect malformed utf-8 string in PHP?
- Remove non-utf8 characters from string
- Removing invalid/incomplete multibyte characters
- How to detect malformed utf-8 string in PHP?
- How to replace Microsoft-encoded quotes in PHP
и др c и т. д., но ни один из них не работал для меня.
Все, что я действительно хочу сделать, это удалить или заменить оскорбительный символ, в идеале - поиск и замену шестнадцатеричных значений, но ни один из примеров, которые я пытался, не работал.
Может ли кто-нибудь помочь мне продвинуться вперед с этим, пожалуйста?
EDIT:
не можете ответить, как не хватает репутации:
Спасибо за ваш вклад. Очень признателен.
Я просто собираюсь идти с поиском шестигранного и заменить:
$DodgyText = preg_replace("/\xEF\xBE\x92/", "" ,$DodgyText);
Я знаю, что это не элегантное решение, но мне нужно быстро исправить, и это работает для меня.
'C292' является AFAIK недействительным UTF-8/код кодировки Unicode ... WTF, Microsoft? – deceze
Вам не нужен preg_replace(), и я обновил свой ответ на основе фактических значений hex, которые вы нашли. –