Unicode кодирование не удается где-то между URL и базой данных - PullRequest
1 голос
/ 30 марта 2012

У меня есть небольшой php-фрагмент, который при вызове через AJAX возвращает некоторые записи из базы данных - на самом деле стандартные вещи.Однако недавно я понял, что есть проблема:

Возможны два сценария:

  • Фрагмент вызывается таким образом, что что-то либо создается, либо обновляется в базе данных
  • Фрагмент вызывается так, что информация возвращается в терминах HTML, повторяемых php

Теперь, когда запрашивает у фрагмента что-либо обновить, нужно указать строку.Если эта строка содержит какой-то нечетный символ, скажем, σ, все немного ломается:

  • Где-то между Javascript, который отправляет запрос, и база данных получает запрос, сигма становится неузнаваемой.Я полагаю, это заключается в том, что URI - это URI, а не причудливый IRI.Если так, как я могу обойти это?Если это помогает, сигма становится σ.

  • . В целях тестирования я попытался ввести сигму непосредственно через интерфейс базы данных - это прекрасно работает.Сигма выглядит как надо, но только из графического интерфейса phpmyadmin!Как только я запрашиваю эту рабочую сигму из php-сниппета, я получаю ?.

Я могу понять, как сложно протолкнуть сигму через URI, но я не совсемпонять, почему php не может правильно обработать сигма, запрошенную во втором пункте - я мог бы поклясться, что php поддерживает utf8_general_ci, что является сопоставлением базы данных.

Итак, для моих вопросов:

  • Как мне кодировать нечетные символы, такие как σ, чтобы он не был искажен при кодировании для целей UTI?
  • Как мне сделать так, чтобы php не искажал сигма на вопросmark?

Примечание: я обычно не понимаю, какие термины использовать в отношении URL / URI / IRI и так далее - я не обязательно обучен в этой области.Прошу прощения за любую бойню аббревиатур.

Приложение: Данные Javascript, передаваемые в php-сниппет, которые помещаются в базу данных, кодируются с помощью encodeURIComponent().


Обновление: Я сузил проблему следующим образом: Javascript передает правильные символы в php, но сам php передает неправильные символы в базу данных.Поскольку сам php должен уметь обрабатывать символы, у меня возникает следующий вопрос: возможно ли, что php не сможет поддерживать кодировку в пределах mysql_query()?

Дополнительная информация: неправильно переданный σ, которыйзаписанный как таковой в базе данных, будет поддерживать эту форму, когда я прошу вернуть ее обратно в php.

Кроме того, поскольку php извлекает строку из URL с использованием $_GET[], возможно ли, что эта функция нарушает кодировку?



Окончательное добавление: Проблема заключается в самом файле php!Когда я добавил echo 'σ';, я получил σ взамен.Тогда мне кажется, что мой php-документ по какой-то причине не кодируется в utf8, и я не знаю, как это настроить ...

ОК, поцарапайте, это все неправильно.Я получил вывод php, то есть HTML, чтобы он выглядел правильно, но даже то, что php передает через запросы к базе данных, неверно.Может ли кодирование быть неудачным только при запросе?

1 Ответ

0 голосов
/ 30 марта 2012

В любом случае, чтобы сократить, возможно, вы могли бы найти это полезным, прежде чем отправлять данные через JS в БД, поэтому теперь попробуйте поэкспериментировать со вставками и обновлениями.

encodeURIComponent (ваш пост var)

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