Ошибка функции PHP htmlspecialchars () при попытке использовать строку UTF-8 - PullRequest
0 голосов
/ 21 ноября 2010

Я сделал следующие вещи:

  1. У меня есть электронная таблица с данными.В одной из строк есть символ ü.
  2. Я сохраняю это как файл CSV в OpenOffice.org.Когда он запрашивает кодировку символов, я выбираю UTF-8.
  3. Я использую Navicat для создания таблицы базы данных MySQL, InnoDB с кодировкой UTF-8 utf8_general и импортирую CSV.
  4. Iпопробуйте использовать PHP-функцию htmlspecialchars($string, ENT_COMPAT, 'UTF-8'), где $string - строка, содержащая специальный символ ü.

Это дает мне ошибку: Недопустимая многобайтовая последовательность в аргументе .Когда я меняю 'UTF-8' на 'ISO8859-1', ошибка не выдается, но отображается неправильный символ.(Символ «неизвестный символ», выглядит как <?>)

Если я использую форму HTML для обновления строки в базе данных, ошибка исчезает и символ отображается правильно, однако, когда я смотрюна записи в Navicat это выглядит двумя символами:

[1/4][A with some thing on top of it]

Какой-то многобайтовый код, который не рассматривается как один символ.

Что происходит, гдечто-то идет не так, и что я могу с этим поделать?

1 Ответ

2 голосов
/ 21 ноября 2010

Хотя я не понимаю, откуда возникла ошибка «недопустимый многобайтовый», я почти уверен, htmlspecialchars() это , а не ваш виновник :

Для целей этой функции кодировки ISO-8859-1, ISO-8859-15, UTF-8, cp866, cp1251, cp1252 и KOI8-R фактически эквивалентны, поскольку символы, на которые влияет htmlspecialchars () занимают одинаковые позиции во всех этих кодировках.

В моем понимании htmlspecialchars() должен нормально работать для строки UTF-8 без указания набора символов. Могу поспорить, что либо HTML-страница, содержащая форму, либо соединение с базой данных, которое вы используете, не в кодировке UTF-8. Для последнего попробуйте отправить

SET NAMES utf8;

в mySQL перед выполнением вставки.

...