PHP MySQL: удалить специальный символ из базы данных - PullRequest
2 голосов
/ 15 января 2010

Иногда я импортирую данные из предоставленных мне CSV-файлов в таблицу mysql.

В последнем, что я сделал, некоторые записи имеют странный плохой символ перед фактическими данными, и они были импортированы в мою базу данных. Сейчас я ищу способ его почистить.

Неверные данные находятся в столбце mysql «электронная почта», кажется, что они всегда перед фактическими данными. При попытке распечатать его на моем экране с помощью PHP, он отображается как . При экспорте в файл CSV он выглядит как Â, и если я SET CHARACTER SET utf8 перед печатью на экране с использованием PHP, он выглядит как обычный пробел ''.

Я думал о написании PHP-скрипта, который просматривал бы все мои строки по одной, исправлял поле адреса электронной почты и обновлял строку. Однако я не совсем уверен насчет части «исправить электронную почту»!

Я подумал, может быть, сделать "взрыв" и использовать плохой символ в качестве разделителя, но я не знаю, как ввести этот символ в мой код.

Может быть, есть способ найти базовое значение / utf8 / hex или какой-либо другой символ, а затем найти его в строке?

Надеюсь, это достаточно ясно.

Спасибо

EDIT: В Hex похоже, что это A0. Что я могу сделать, чтобы найти и удалить символ по его шестнадцатеричному значению? Думаю, в PHP или напрямую в MySQL ...

Ответы [ 4 ]

1 голос
/ 15 января 2010

Я думаю, что нашел ответ PHP, который, кажется, работает более надежно:

$newemail = preg_replace('/\xA0/', '', $row['oldemail']);

А потом я собираюсь обновить строку новым письмом

1 голос
/ 15 января 2010

SELECT HEX (поле) ИЗ таблицы; должен помочь определить характер.

1 голос
/ 15 января 2010

Как альтернативное решение, на самом деле может быть проще решить проблему у источника. Я сталкивался с подобными проблемами с файлами CSV, экспортированными из Excel, и в целом обнаружил, что используется что-то вроде ...

$correctedLine = mb_convert_variables('UTF-8', 'Windows-1252', $sourceLine);

... имеет тенденцию исправлять проблему. (Тем не менее, вам нужно убедиться, что у вас включено многобайтовое расширение строки в / enabled.)

1 голос
/ 15 января 2010

Вы можете обрезать любой непечатаемый символ ascii как:

update t set email = substr(email, 2) where ascii(email) not between 32 and 126

Вы можете получить значение ascii оскорбительного символа с помощью этого:

select ascii(email) as first_char
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...