PHP акцентированные символы в POST submit - PullRequest
2 голосов
/ 21 декабря 2010

У меня есть HTML-форма на submit.php, страница кодируется как UTF-8 (с использованием мета-тега), когда форма отправляется в process.php (через POST), некоторые переменные сохраняются в сеанса, и страница использует Header: Location для возврата к submit.php, который затем использует переменные сеанса для повторного отображения некоторой введенной информации.

Если я введу акцентированный символ, например & eacute; (& eacute), когда страница возвращается к submit.php, она не отображает символ правильно, я получаю & atilde; (& atilde) и & copy; (и скопируйте).

Куда мне обратиться, чтобы решить эту проблему? Я предполагаю, что это сторона сервера, так как отображаемая страница всегда UTF-8 (браузер подтверждает, что страница UTF-8 до и после отправки)

Решение:

Строка проходила через htmlentities () в одной точке, которая, как оказалось, имеет кодировку символов по умолчанию ISO-8859-1. Ответом было просто указать 'UTF-8' в вызове функции.

Ответы [ 2 ]

6 голосов
/ 21 декабря 2010

é превращение в является верным признаком того, что 2-байтовый символ UTF-8 в какой-то момент интерпретируется в 1-байтовом наборе символов (скорее всего ISO-8859-1).

Вам нужно найти, где это происходит, и исправить это.

Может быть, показать какой-то код - возможно, у кого-то есть идея.

1 голос
/ 21 декабря 2010
$_SESSION['thestring'] = $_POST['thestring']

Не может быть источником проблемы.Здесь PHP просто копирует два байта дословно .Здесь не будет происходить преобразование кодировки.Следовательно, любое преобразование, вероятно, происходило до или после этого.

Чтобы убедиться, что $ _POST не является культовым предметом, убедитесь, что ваш <form> содержит accept-charset="UTF-8".Это часто упускается из виду.Во-вторых, для целей тестирования выведите $_POST["thestring"] прямо при получении.Если здесь возникает проблема, вам понадобятся Firebug и xdebug ..

Маловероятно, что хранилище сеансов или PHP изменят содержимое строки в $_SESSION.Вот почему я все-таки предположил бы, что ошибка находится на странице вывода.Сделайте отдельную тестовую страницу, и print $_SESSION["thestring"] там.Не забывайте об этом header("Content-Type: text/html; charset=utf-8");.

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