Как в XHTML 1.1 проверить амперсанд без его выхода? - PullRequest
5 голосов
/ 14 января 2010

Моя проблема заключается в следующем. У меня есть страница XHTML 1.1 , которая имеет форму и поля ввода. Одно из полей ввода содержит значение, которое является URI. Этот URI содержит пары ключ-значение с амперсандом ( & ) в качестве разделителя аргументов, который будет передан как запрос GET другим веб-приложением в браузере.

Обычно я использовал бы сущность & для создания амперсандов для проверки кода как XHTML 1.1 . Моя проблема здесь в том, что приложение не получает GET-запрос, поскольку (как и ожидалось) браузер не понимает, как обрабатывать & в URI.

Так что мой вопрос на самом деле заключается в том, как написать амперсанд без использования сущности HTML, поэтому браузер по-прежнему распознает его как разделитель аргументов и запрос GET правильно передается в веб-приложение.

Я пробовал шестнадцатеричное (% 26) кодирование амперсанда, но браузер по-прежнему не «переводит» его обратно на правильный символ &.

Смежный вопрос, но он не дает точного ответа на вопрос, который я задаю:

XHTML и кодировка & (Ampersand)

Ответы [ 5 ]

1 голос
/ 14 января 2010

Экранированный & должен быть преобразован клиентом (браузером) везде в документе XHTML.

Таким образом, вы должны сбежать через каждые & с &

1 голос
/ 14 января 2010

Как уже упоминалось в другом вопросе, на который вы ссылались, браузер преобразует & в & при обработке страницы, поэтому «&» (не &) следует отправлять на сервер в запросе GET. Возможно, вы используете Ajax для выполнения запроса GET, в этом случае вам может понадобиться декодировать HTML. Сущность требуется для XHTML - альтернативной кодировки нет, просто убедитесь, что она правильно декодирована.

Ссылка: Символ & изменяется на & в гиперссылке

1 голос
/ 14 января 2010

Невозможно включить символ амперсанда в значение атрибута без использования объекта.

Невозможно включить символ амперсанда в качестве textNode без использования объекта или маркеров CDATA (но я уверен, что вы работаете как text / html, поэтому их нельзя использовать).

Тем не менее, любой браузер, который не может декодировать объект, не работает. Никакой основной браузер там не работает. Вы используете неясный и неработающий браузер или неправильно диагностируете проблему.

0 голосов
/ 14 января 2010

Я не мог потратить больше времени на это. Я просто изменил разделитель аргументов, добавив также точку с запятой (;), чтобы я мог использовать его вместо амперсанда:

#cat .htaccess
php_value arg_separator.input "&;"
0 голосов
/ 14 января 2010

Без кода трудно определить, где вы пытаетесь хранить эту информацию, если бы вы могли опубликовать код, мы могли бы лучше разобраться в проблеме.

Один из возможных вариантов (если это действительно то, с чем вы сталкиваетесь) - это переместить элементы строки запроса в другие элементы формы, например:

<form action="example.com/?foo=1&bar=2>
    <!-- ... -->
</form>

до:

<form action="example.com">
    <input type="hidden" name="foo" value="1" />
    <input type="hidden" name="bar" value="2" />
    <!-- ... -->
</form>
...