【发布时间】:2013-01-14 23:56:17
【问题描述】:
我有一个输出 HTML 的转换。为了避免可能在旧浏览器中中断的自关闭标签(例如<img /> 而不是<img></img>)输出方法必须是html。然后虽然应用了 URL 编码,但它破坏了我的应用程序。例如:
输入
<html>
<head>
</head>
<body>
{{example}}
<a href="{{example}}" >abc</a>
<img src="http://placehold.it/20x20"></img>
</body>
</html>
转型
<?xml version="1.0" encoding="utf-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" /><!-- either -->
<xsl:output method="html" indent="yes" /><!-- or -->
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
</xsl:template>
</xsl:transform>
在第一种情况下,输出是:
<?xml version="1.0"?>
<html>
<head>
</head>
<body>
{{example}}
<a href="{{example}}">abc</a>
<img src="http://placehold.it/20x20"/>
</body>
</html>
在第二种情况下,输出是:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
{{example}}
<a href="%7B%7Bexample%7D%7D">abc</a>
<img src="http://placehold.it/20x20">
</body>
</html>
第一种情况的好处是@href 属性不是 URL 编码。这对我的应用程序来说是必须的。第二种变体虽然不好,但更好的是,<img> 是自动关闭的。这不能用于<img> 标签和其他一些标签。
有没有办法在没有 URL 编码的情况下获得method="html" 的好处?如果是,怎么做?
【问题讨论】:
-
我怀疑这可能取决于处理器。你用的是哪一个?尽管在这种情况下百分比编码是正确的 - HTML 中
a的href必须是有效的 URI。是否可以选择使用((example))而不是{{example}}作为括号 在 URI 中允许? -
我正在使用 PHP de3.php.net/manual/en/class.xsltprocessor.php 类,但将来也可能会使用基于 Java 的处理器。使用不同样式的括号是个好主意,但我不确定这是否适用于我们当前的应用程序。不过,谢谢!
-
您确定自闭合标签(与未闭合标签相比)会破坏旧版浏览器吗?我的印象是真的旧浏览器只是将
/视为一个属性名称,前面有一个空格。 -
@Eric 我不确定它们是否会破坏所有或特别是非常旧的浏览器,但至少有一些我需要支持的渲染引擎对它们很挑剔。