0
4

2 回答 2

0

如果您将 post_content 放入属性值中,您将很难使用 XSLT 执行此操作,因为该属性将包含一个大长字符串。如果用户输入了无效的 HTML 会发生什么?

如果您将 xml 直接放入名为“post_content”的元素中,则可以使用以下模板:

<xsl:template match="post_content">
  <xsl:apply-templates mode="post" />
</xsl:template>

<xsl:template match="*" mode="post">
  <xsl:value-of select="concat('&lt;',name(),'&gt;')" />
  <xsl:apply-templates mode="post"/>
  <xsl:value-of select="concat('&lt;/',name(),'&gt;')" />
</xsl:template>

<xsl:template match="p | br | b | a" mode="post">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()" mode="post"/>
    </xsl:copy>
</xsl:template>

这有点粗略,但基本上,这个想法是任何p, br,ba元素都被最后一个模板拾取并“按原样”复制,其他任何东西都由*模板拾取,而不是使用实际元素,它改为输出转义文本。第一个模板只是为了确保其中的任何元素都使用“发布”模式进行处理,因此这些模板不会意外处理它们不应该处理的任何其他内容。

于 2012-06-23T20:19:04.907 回答
0

XSLT 并不是真正为此而设计的,虽然您可以使用 XSLT 2.0 使用正则表达式来做到这一点,但这不是您正在使用的 XSLT 版本,并且 PHP 目前默认不使用 XSLT 2。你最好用你的后端编程语言(比如 PHP)来做。

我意识到你说你不想使用strip_tags它有什么理由吗?它确实允许您指定可以保留的标签。

于 2012-06-23T09:52:26.897 回答