URL и & амперсанд - PullRequest
       20

URL и & амперсанд

2 голосов
/ 31 октября 2009

Используя XSLT и XPath 1.0, у меня есть строка, которую я хочу экранировать для использования в URL, например:

<description>one word &amp; another</description>

Таким образом, текст () элемента description должен получить экранированный URL.

Как бы я это сделал?

Используя C # (XslCompiledTransform), код будет:

string a = Server.UrlEncode("one word & another");

И будет производить:

one+word+%26+another

Есть предложения?

Ответы [ 5 ]

4 голосов
/ 31 октября 2009

Для этого нет ничего встроенного, но вместо того, чтобы изобретать велосипед, уже есть таблицы стилей, например ::1001

http://skew.org/xml/stylesheets/url-encode/

Преобразования просты, но (надеюсь), кто-то другой сделает за вас отладку ...

2 голосов
/ 31 октября 2009

Фрагмент <description>one word & another</description> напоминает XML, но голый амперсанд недопустим. XSL требует легального XML.

Один из способов сделать его легальным без подстановки &amp; - сделать текст в разделе CDATA:

<description><![CDATA[one word & another]]></description> 
2 голосов
/ 31 октября 2009

В XML (и, следовательно, XSL) вам нужно экранировать символы &,> и <с помощью </p>

&amp;
&lt;
&gt;
1 голос
/ 17 октября 2013

Для моих целей ни одно из этих решений не сработало. Я работал в проприетарных рамках и использовал сущность:

&#38;

Это был единственный способ добавить дополнительные параметры в строку URI в контексте шаблона XSL.

1 голос
/ 03 ноября 2009

Возможно ли использовать XSLT 2.0? Я упоминаю об этом только потому, что есть отличная функция кодирования URL, которая решит все ваши проблемы.

<xsl:value-of select="url:encode('This is URL encoded')" />
...