Pass'&', возвращаемый из значения опции selecetd, в url


<select name="n" onchange="if(this.selectedIndex != 0) window.location = this.options[this.selectedIndex].value">
  <option value="url&amp;param={param}">
     <xsl:if condition>
       <xsl:attribute name="selected">true</xsl:attribute>
     </xsl:if>
  </option>
</select>

Приведенный выше код работает нормально, он передает выбранную опцию в url. Единственная проблема заключается в том, что когда параметр содержит знак " & " между ними. Как передать параметр, если его значение-что-то вроде "A & B"? urlencode кажется не очень полезным? Спасибо, что уделили мне время!

1 2

1 ответ:

Попробовал urlencode (), но он возвращает ошибку двойного экранирования. Обратите внимание, что этот вопрос заключается не в том, чтобы просто закодировать весь url, а в том, чтобы экранировать некоторые специальные символы для передачи параметров. У меня была другая ситуация, в которой значение параметра имеет знак " + " в строке. Я подумал, что, вероятно, лучше показать строку, но вернуть nameid что-то в качестве значения, которое является int. Мое значение параметра изменилось примерно на следующее:

  <select onchange="if(this.selectedIndex != 0) window.location = this.options[this.selectedIndex].value">
    <option value="" selected="selected"><xsl:value-of select="/A/D/NAME"/></option>
    <xsl:for-each select="/A/B/C">                  
     <option value="URL&amp;Name={NAME}&amp;ID={ID}"
      <xsl:if test="NAME=/A/D/NAME"><xsl:attribute name="selected">true</xsl:attribute></xsl:if>
      <xsl:value-of select="NAME"/>
     </option>
    </xsl:for-each>
  </select>

Url теперь имеет идентификатор в качестве параметра2 соответствие параметр1(имя). И я могу использовать этот идентификатор для поиска в базе данных и возвращать строку (имя), чтобы показать снова. Это не дает прямого ответа на вопрос, но дает обходной путь.