XSLT версия 1, кодировка URL - PullRequest
       9

XSLT версия 1, кодировка URL

14 голосов
/ 11 марта 2010

Есть ли функция кодирования URL в XSLT версии 1? Мне нужно что-то похожее на функцию encodeURIComponent в JavaScript?

Поскольку это невозможно, я использую платформу .NET, поскольку XSLT применяется к странице Sharepoint. Есть ли способ закодировать эту покупку, вызывая функцию кодирования javascript внутри XML, фрагмент ниже:

<xsl:template name="BuildLink">
    <xsl:param name="PrimarySubject" />
    <xsl:text>?PrimarySubject=</xsl:text>
    <xsl:value-of select="$PrimarySubject" />
</xsl:template>

Спасибо

Ответы [ 4 ]

13 голосов
/ 11 марта 2010

вы можете использовать JScript, встроенный в XSLT ...

<msxsl:script language="JScript" implements-prefix="custom">
function uriencode(string) {
 return encodeURIComponent(string);
}
</msxsl:script>

и называть его как custom:uriencode( url_to_encode )

Сначала вам нужно будет определить пространство имен, добавив к <xsl:stylesheet ... пометьте xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:custom="http://youdomain.ext/custom"

[обновление]

URL-адрес, который я указал для пользовательского пространства имен, может быть любым ... itэто просто уникальный идентификатор ..
( по ссылке делается вывод, что это менее запутанно, если вы не используете URL в качестве идентификатора .. )

[udpdate 2]

Некоторая дополнительная информация.
Если вы используете MSXML6, вам нужно вручную разрешить сценарии в XSLT, используя свойство AllowXsltScript.( ссылка )
В зависимости от того, как вы загружаете xslt и его настройки, посмотрите на примеры в Блоки скриптов с помощью msxsl: script о том, как разрешать скрипты

7 голосов
/ 19 августа 2010

Эти таблицы стилей XSLT 1.0 могут использоваться для кодирования / декодирования URL:

  1. URL-decode.xsl
  2. URL-encode.xsl

Описание: только очень небольшое подмножество из символов ASCII можно безопасно встроенный в URI. Персонажи снаружи этот набор должен быть экранирован с помощью так называемое «кодирование URL» или "% -Escaping". Персонажи преобразуется в байты в соответствии с некоторыми кодирование (ASCII, если возможно) и те каждый байт записывается как «%» сопровождаемый 2 шестнадцатеричными цифрами. кодирование, используемое в качестве основы для этого преобразование может быть чем угодно, но имеет тенденцию быть продиктованным контекстом, в котором URI используется. Недавние и будущие стандарты используют UTF-8, но наследие приложения, в том числе многие широко развернутый, на стороне сервера обработчики данных формы HTML предполагают ISO-8859-1.

Например, приветствие "¡Hola, Цезарь! "Может быть встроен в URI, если он записывается следующим образом: % A1Hola% 2C% 20C% E9sar !. (... если предположить ISO-8859-1 как основа для кодирования. Если бы это было на основе UTF-8, то было бы быть% C2% A1Hola% 2C% 20C% C3% A9sar!).

Демонстрационный URL-код url-encode.xsl произвольная строка передается как параметр с именем iso-string. Предполагает ISO-8859-1 будет основой для URL-кодирование. Должно быть совместимо с любым процессором XSLT 1.0.

Декодирование на основе ISO-8859-1 URL-кодированная строка использует аналогичный техника. Смотрите url-decode.xsl для демо. Его параметр url является строкой быть расшифрованным.

1 голос
/ 11 марта 2010

При определенных обстоятельствах вы можете использовать EXSLT (предоставляемые синтаксическим анализатором расширения): FAQ по XSLT Дэйва Поусона на этом.

Однако XSLT завершен по Тьюрингу, поэтому теоретически можно написать базовый кодировщик URL-адресов в самом XSLT (я бы не стал пытаться).

1 голос
/ 11 марта 2010

Нет ни одного. XSLT не знает URL и HTML.

В зависимости от используемого языка и платформы вы можете использовать расширение XSLT , которое это делает.

...