Проблема амперсанда в XML при создании строки URL - PullRequest
4 голосов
/ 29 июня 2011

Я работаю с фидом XML, в качестве одного из узлов которого используется строка URL, подобная следующей:

http://aflite.co.uk/track/?aid=13414&mid=32532&dl=http://www.google.com/&aref=chris

Я понимаю, что амперсанды вызывают много проблем в XML и их следует избегать, используя & вместо простого &. Поэтому я изменил php следующим образом:

<node><?php echo ('http://aflite.co.uk/track/?aid=13414&amp;mid=32532&amp;dl=http://www.google.com/&amp;aref=chris'); ?></node>

Однако, когда это генерирует ленту XML, строка появляется с полным &amp; и поэтому фактический URL не работает. Приносим извинения, если это очень простое недоразумение, но некоторые рекомендации будут полезны.

Я также пытался использовать %26 вместо &amp;, но все еще получал ту же проблему.

Ответы [ 2 ]

7 голосов
/ 30 июня 2011

Если вы вставляете что-то в XML / HTML, вы всегда должны использовать функцию htmlspecialchars . это выведет ваши строки в правильный синтаксис XML.

но вы столкнулись со второй проблемой. Вы добавили второй URL к первому. эта потребность также ускользнула в синтаксис URL. для этого вам нужно использовать urlencode .

<node><?php echo htmlspecialchars('http://aflite.co.uk/track/?aid=13414&mid=32532&aref=chris&dl='.urlencode('http://www.google.com/')); ?></node>
4 голосов
/ 30 июня 2011

&amp; правильно для экранирования амперсандов в документе XML.Пример, который вы привели, должен работать.

Вы заявляете, что это не работает, но вы не указали, какое приложение вы используете или каким образом оно не работает.Что именно происходит при нажатии на ссылку?Строки &amp; попадают в поле URL браузера?Если это так, то это похоже на ошибку в программном обеспечении, с которым вы просматриваете XML.Вы пытались посмотреть на XML в другом приложении, чтобы увидеть, является ли проблема непротиворечивой?

Чтобы ответить на последнюю часть вашего вопроса: %26 определенно не будет работать для вас - это будет то, что вы 'd используйте, если ваши параметры URL должны содержать амперсанды.Скажем, например, в aref=chris, если имя chris относится к амперсанду (допустим, имя пользователя было chris&bob), тогда этот амперсанд должен быть экранирован с помощью %26, чтобы анализатор URL не виделэто как начало нового параметра URL.

Надеюсь, это поможет.

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