问问题
484 次
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('<',name(),'>')" />
<xsl:apply-templates mode="post"/>
<xsl:value-of select="concat('</',name(),'>')" />
</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
,b
或a
元素都被最后一个模板拾取并“按原样”复制,其他任何东西都由*
模板拾取,而不是使用实际元素,它改为输出转义文本。第一个模板只是为了确保其中的任何元素都使用“发布”模式进行处理,因此这些模板不会意外处理它们不应该处理的任何其他内容。
于 2012-06-23T20:19:04.907 回答
0
XSLT 并不是真正为此而设计的,虽然您可以使用 XSLT 2.0 使用正则表达式来做到这一点,但这不是您正在使用的 XSLT 版本,并且 PHP 目前默认不使用 XSLT 2。你最好用你的后端编程语言(比如 PHP)来做。
我意识到你说你不想使用strip_tags
它有什么理由吗?它确实允许您指定可以保留的标签。
于 2012-06-23T09:52:26.897 回答