Postgresql php и проблема с байтовой последовательностью - PullRequest
1 голос
/ 04 августа 2010

Я установил метатег html на uft8. Кроме того, для формы charset установлено значение utf8. Чтобы быть уверенным, что я запустил функцию php utf8_encode () в строке с ошибками

, даже после всего этого я получаю postgresошибка при выполнении запроса через функцию php pg_query.

Тем не менее, когда я копирую и вставляю запрос в командную строку, он выполняется нормально.

Запрос (или, по крайней мере, его часть):INSERT INTO location (... alt_thorfare_name ...) VALUES (... 'BÓTHAR GHLEANN / SHEÁIN' ...);

Ошибка: Запрос не выполнен: ОШИБКА: недопустимая последовательность байтов для кодирования UTF8: 0xd354СОВЕТ: Эта ошибка также может произойти, если последовательность байтов не соответствует кодировке, ожидаемой сервером, который контролируется client_encoding

Проблема заключается в фаде (резкий акцент с ирландского языка) на O и A.

Я застрял на том, что делать дальше, даже пытаясь найти решение.Любая помощь приветствуется

Ответы [ 2 ]

2 голосов
/ 04 августа 2010

Эта ошибка возникает из-за того, что вы на самом деле не передаете данные UTF-8 в pg_query.

0xd354 на самом деле не является действительной последовательностью UTF-8, это последовательность ISO-8859-1 для «ÓT». См:

header("Content-type: text/plain");
$s = "ÓT";
$utf8 = mb_convert_encoding($s, "UTF-8", "HTML-ENTITIES");
$u = unpack("H*", $utf8);
echo "UTF-8 byte sequence: " . reset($u),"\n";
$iso8859 = mb_convert_encoding($s, "ISO-8859-1", "HTML-ENTITIES");
$u = unpack("H*", $iso8859);
echo "ISO-8859-1 byte sequence: " . reset($u),"\n";

дает

UTF-8 byte sequence: c39354
ISO-8859-1 byte sequence: d354

Сделайте это:

  • Не используйте utf8_encode(), если, возможно, вы не откуда-то получаете данные ASCII (например, внешний текстовый файл).
  • Кодируйте ваши PHP-файлы как UTF-8 без спецификации .
1 голос
/ 04 августа 2010

Чтобы быть уверенным, что я запустил php функция utf8_encode () на оскорбительная строка

Здесь все идет не так, вам не нужно кодировать utf8 в utf8, это уже utf8.

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