2

我正在使用这样的 JavaScript:

<script>
  <xsl:for-each select = '/request/alldata'>

    var l_allDataValue   = '<xsl:value-of select="." />';
    var l_dataArray = l_allDataValue.split('!~');

    callFunction(l_dataArray);

  </xsl:for-each>
</script>

但是,如果其中有一个撇号'/request/alldata它将破坏 JavaScript,因为以下表达式包含在撇号中:

'<xsl:value-of select="." />'

但如果我用以下任何一种替换它,它就会起作用......

"<xsl:value-of select="." />"或者"<xsl:value-of select='.' />"

现在我知道撇号'与 JavaScript 代码发生冲突,但哪种解决方案适用于所有浏览器?

4

1 回答 1

2

您可以使用'<xsl:value-of select="." />',但您需要 <alldata>通过像这样添加斜杠来转义 中的所有单引号撇号\'

您可以使用"<xsl:value-of select="." />" or "<xsl:value-of select='.' />",但如果有机会<alldata>包含双引号,那么您也需要转义这些,就像这样\"

如果你想使用第一个,那么这将转义单引号:

<xsl:template name="escapeSingleQuotes">
  <xsl:param name="txt"/>

  <xsl:variable name="backSlashSingleQuote">&#92;&#39;</xsl:variable>
  <xsl:variable name="singleQuote">&#39;</xsl:variable>

  <xsl:choose>
    <xsl:when test="string-length($txt) = 0">
      <!-- empty string - do nothing -->
    </xsl:when>

    <xsl:when test="contains($txt, $singleQuote)">
      <xsl:value-of disable-output-escaping="yes" 
                    select="concat(substring-before($txt, $singleQuote), $backSlashSingleQuote)"/>

      <xsl:call-template name="escapeSingleQuotes">
        <xsl:with-param name="txt" select="substring-after($txt, $singleQuote)"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:otherwise>
      <xsl:value-of disable-output-escaping="yes" select="$txt"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

您可以像这样在代码中使用:

var l_allDataValue = '<xsl:call-template name="escapeSingleQuotes">
                        <xsl:with-param name="txt" select="."/>
                      </xsl:call-template>'
于 2013-05-08T07:51:22.847 回答