Как мне запретить Internet Explorer переписывать мой текст? - PullRequest
1 голос
/ 11 апреля 2011

У меня есть переменная javascript, которая содержит URL, заполняемый путем вывода тега script из php. Намерение состоит в том, чтобы при определенных обстоятельствах изменить веб-страницу на этот URL.

var url = "/somepage?q=3&region=1";

Проблема в том, что URL содержит последовательность «& reg», которую Internet Explorer меняет на «®» без запроса.

Я пытался экранировать весь URL-адрес с помощью htmlspecialchars, что нарушает работу других браузеров. Отключение режима причуд может помочь, но это не вариант с текущей системой. Добавление тега script ничего не сделало.

редактирование: Я нашел одно решение - «избежать» URL-адреса с помощью конкатенации.

var url = '<?php implode( "&'+'", explode( '&', '/somepage?q=3&region=1' ) ); ?>';

Я также понял, что, наверное, стоит упомянуть, как я меняю страницу:

document.location.href = url;

редактирование: Оказывается, у меня была ошибка в моем теге скрипта. Минимальный пример, который показывает ту же «проблему»:

<script type="text/javascript" />
    var url = "/test?mode=preview&region=1";
</script>

Самозакрывающийся начальный тег здесь важен.

1 Ответ

4 голосов
/ 11 апреля 2011

должно быть var url = "/somepage?q=3&amp;region=1";

Всегда используйте &amp; в URL, чтобы браузер понимал это как разделитель запросов и не думал, что это относится к некоторой htmlentity (проблема здесь в том, что IE не заботится, присутствует ли точка с запятой или нет, и принимает &reg должно быть &reg;)

РЕДАКТИРОВАТЬ: реальный контекст был добавлен после того, как я ответил, и, как указано в самом вопросе и в комментариях, вы не должны использовать &amp;, если вы собираетесь использовать переменную для перенаправления, используя некоторые window.location

НО, поскольку у нас есть PHP, я бы предложил использовать некоторый PHP-код, подобный этому, если перенаправление javascript не является частью какого-либо другого сложного сценария:

<?php
header('Location: http://domain/somepage?q=3&region=1');
exit();
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...