Очистка SQL «Неправильное строковое значение» Ошибка из PHP - PullRequest
0 голосов
/ 28 апреля 2018

Мне кажется, этот вопрос миллион раз, но, похоже, все хотят решить проблему в базе данных. Я не буду. Я получаю эту ошибку при разборе большого текстового файла, выбирая то, что мне нужно, и вставляя его в свою базу данных. Примерно из 24 тысяч строк в 30 или около того содержатся недопустимые символы.

Вот пример ошибки, после которой следует запрос, вызвавший ее:

[Query Error: Incorrect string value: '\xEF\xBC\x89' for column 'company' at row 1]

[INSERT INTO mac_address_db_new (hex,company) VALUES('0847D0','Nokia Shanghai Bell Co. Ltd.)')]

«Плохие» символы в строке, которую я вставляю, вероятно, не дойдут до вашего браузера, поэтому вы, вероятно, не сможете увидеть символ.

Но я ищу более простое решение. Есть ли способ, которым я могу отфильтровать эти символы в PHP, прежде чем пытаться отправить их в MySQL? Я уже фильтрую следующие функции: trim( ), mb_convert_encoding( ) (до UTF-8), htmlentities( ), ~ некоторые функции, связанные с регистром ~, и, наконец, mysqli_real_escape_string( ). Но все же плохие персонажи переживают. У меня нет контроля над вводом текстового файла.

1 Ответ

0 голосов
/ 28 апреля 2018

Я наконец нашел решение. Я отказался от функции mb_convert_encoding( ) и вместо этого использовал iconv( ), а именно:

$output = iconv( 'UTF-8', "ISO-8859-1//IGNORE", $input );

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

...