Cap*_*ack 7 html css premailer
我正在使用PreMailer.Net将 CSS 内联到 HTML 文档中。但是,当我调用 MoveCssInline 时,它会编码非 ASCII 字符,例如“&”。例如:
<a href="http://www.website.com/page?param1=a¶m2=b"></a>
Run Code Online (Sandbox Code Playgroud)
改为:
<a href="http://www.website.com/page?param1=a&param2=b"></a>
Run Code Online (Sandbox Code Playgroud)
我认为这种行为仅限于 URL 和 href 值,但事实证明它也编码了innerHTML/content。例如:
此外,我进行了进一步测试,发现这种编码不仅仅针对 href 等属性进行。事实上,它也会对 text/InnerHTML 值进行编码,这些值在没有编码的情况下是绝对有效的 html。例子:
<p>&</p>
Run Code Online (Sandbox Code Playgroud)
这是有效的 HTML,不应进行编码,但 PreMailer.Net 会将其更改为:
<p>&</p>
Run Code Online (Sandbox Code Playgroud)
有没有人对此有修复或解决方法?我无法控制 HTML 文档,并且除了内联 CSS 之外,不允许更改 URL 或内容。
根据您的个人需求,仅供参考,请尝试以下操作:
Symbols.Ampersand: temp.Append("&")
Symbols.NoBreakSpace: temp.Append(" ")
Symbols.GreaterThan: temp.Append(">")
Symbols.LessThan: temp.Append("<")
Run Code Online (Sandbox Code Playgroud)
更新:
这些行来自名为AngleSharp的 PreMailer.Net 依赖项的第132-139行,它是一个 HTML 解析器。
目前,据我所知,AngleSharp 上的编码是强制性的,因此无论是 AngleSharp 还是 PreMailer.Net 中的任何设置都无法避免它。
根据以下已关闭的问题,这是根据 HTML 规范设计的。然而,我相信仍然存在一个错误,因为它应该只编码属性值,而不是innerHTML内容。此外,我认为这对于 CSS 内联来说不是可接受的行为,它不应该验证或清理 HTML。此外,我什至认为解析器不应该进行客户端未要求的更改。