html - 如何让 PreMailer.Net 不更改非 ascii 字符的编码?
问题描述
我还将我的问题作为Github 问题发布在官方 repo 上。
我正在使用PreMailer.Net将 CSS 内联到 HTML 文档中。但是,当我调用 MoveCssInline 时,它会编码非 ASCII 字符,例如“&”。例如:
<a href="http://www.website.com/page?param1=a¶m2=b"></a>
改为:
<a href="http://www.website.com/page?param1=a&param2=b"></a>
我认为这种行为将仅限于 URL 和 href 值,但事实证明它也编码了 innerHTML/content。例如:
此外,我进一步测试并发现这种编码不仅仅针对像 href 这样的属性。事实上,它还会对 text/InnerHTML 值进行编码,这些值是没有编码的绝对有效的 html。例子:
<p>&</p>
这是有效的 HTML,不应编码,但 PreMailer.Net 会将其更改为:
<p>&</p>
有没有人对此有修复或解决方法?我无法控制 HTML 文档,并且除了内联 CSS 之外,我不允许更改 URL 或内容。
解决方案
根据您的个人需求,仅作为指南,请尝试以下操作:
Symbols.Ampersand: temp.Append("&")
Symbols.NoBreakSpace: temp.Append(" ")
Symbols.GreaterThan: temp.Append(">")
Symbols.LessThan: temp.Append("<")
更新:
这些行来自名为AngleSharp的 PreMailer.Net 依赖项的第132-139 行,它是一个 HTML 解析器。
目前,据我所知,编码在 AngleSharp 上是强制性的,因此在 AngleSharp 或 PreMailer.Net 中的任何设置都无法避免。
根据以下已关闭问题,这是按照 HTML 规范设计的。但是,我相信仍然存在一个错误,因为它应该只编码属性值,而不是 innerHTML 内容。此外,我不认为这是 CSS 内联程序可接受的行为,它不应该验证或清理 HTML。此外,我什至认为解析器不应该进行客户未要求的更改。
推荐阅读
- python - 计算没有隐藏线的出现频率
- clojure - 如何获得序列的倒数第二个元素?Clojure
- javascript - 如何使用 quickbooks-js 从发票中查询所有信息?
- tdd - 单元测试用例语句
- python - 如何解决python selenium中不可调用的“模块”对象
- python - 为什么带有两组括号的 .loc 分配会导致 pandas.DataFrame 中的 NaN?
- celery - python celery 延迟传递对象(类实例)
- swift - 如何在 swift 中同时使用多个 xmlparsers?
- python - 绘制具有连续顶点的椭圆
- javascript - 如何在 asp.net core mvc 中设置 reCaptcha 主题