У меня есть небольшой 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 передает через запросы к базе данных, неверно.Может ли кодирование быть неудачным только при запросе?