Я сделал следующие вещи:PHP htmlspecialchars() ошибка функции при попытке использовать UTF-8 строку
- У меня есть таблица с данными. Одна из строк имеет в ней символ ü.
- Я сохраняю это как файл CSV в OpenOffice.org. Когда он спрашивает меня о кодировке символов, я выбираю UTF-8.
- Я использую Navicat для создания таблицы базы данных MySQL, InnoDB с UTF-8 utf8_general кодирования и импорта CSV.
- Я пытаюсь использовать функцию PHP
htmlspecialchars($string, ENT_COMPAT, 'UTF-8')
где$string
- это строка, содержащая специальный символ ü.
Это дает мне ошибку: Неверная последовательность многобайтов в аргументе. Когда я меняю 'UTF-8'
с 'ISO8859-1'
, ошибка не выдается, но отображается неправильный символ. (Символ «неизвестный символ» выглядит как <?>
)
Если я использую HTML-форму для обновления строки в базе данных, ошибка исчезает, и символ отображается правильно, однако, когда я затем смотрю на запись в Navicat, это выглядит два символа:
[1/4][A with some thing on top of it]
Некоторые многобайтовая, не рассматривается как один из character.`
что происходит, где все идет не так, и что я могу с этим поделать ?
Согласно основному журналу запросов mysql, 'SET NAMES utf8' фактически отправляется на сервер MySQL. Хотя в этом процессе нет формы (есть один, когда я обновляю запись), который установлен в UTF-8 с использованием метатега HTML. (Но опять же, ошибка уже появляется до того, как была использована форма.) –
@Pelle вы можете подтвердить, что она действительно отправлена на сервер * для этого соединения *? И чтобы подтвердить, что вы указываете ошибку, на самом деле вызывается 'htmlspecialchars()'? –
Выяснил это. Весь материал был UTF-8, EXCEPT: соединение при использовании для выбора данных. Помещение SET NAMES UTF8 до того, как операторы select зафиксировали это. –