【问题标题】:Best HTML encoder for Delphi?Delphi 的最佳 HTML 编码器?
【发布时间】:2010-06-23 21:38:43
【问题描述】:

似乎我的数据在使用 HTTPapp.HTMLEncode(string): String; 时被损坏了;

HTMLEncode( 'Jo&hn D<oe' ); // returns 'Jo&am'

这是不正确的,并且正在破坏我的数据。有人对工作得更好的 VCL 组件有建议吗?除了花时间编码所有案例

http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

更新

在了解更多关于 HTML 之后,我发现没有必要对链接中引用的其他字符进行编码。您只需要知道四个 HTML 保留字符是

&,<,>,"

VCL HTTPApp.HTMLEncode( ) 函数的问题是由于缓冲区大小和默认 Unicode 字符串类型的新 Delphi 2009/2010 规范,这可以按照@mason 下面所说的方式修复,也可以是通过调用 WideFormatBuf( ) 而不是当前正在使用的 FormatBuf( ) 来修复。

【问题讨论】:

    标签: html delphi encoding


    【解决方案1】:

    替换字符串中的 、& 和 " 字符是微不足道的。因此,您可以轻松地为此编写自己的例程。(如果您的 HTML 页面是 UTF-8,则绝对没有理由编码任何其他字符,例如 U+222B(整数符号)。)

    但是,如果您希望坚持使用 Delphi RTL,那么您可以查看 HTTPUtil.HTMLEscape,其签名与 HTTPApp.HTMLEncode 完全相同。

    或者,看看this SO question

    【讨论】:

    【解决方案2】:

    您可能正在使用 Delphi 2009 或 2010。在我看来,他们似乎忘记为 Unicode 更新 HTMLEncode。它将错误的缓冲区长度传递给 FormatBuf。

    HTMLEncode 例程基本上是正确的,除此之外,它很短。您可能只是制作自己的副本。到处调用 FormatBuf,它给出了 5 个参数。第二个和第四个是整数值。在每次调用中将它们都加倍,(只有四个),然后它就会起作用。

    此外,您应该为此打开一个QC 报告,以便修复它。

    【讨论】:

    • 我在他们的代码中看到他们寻找的唯一字符是 Convert = ['&','','"']; 如果这被扩展以适应所有 HTML 特殊字符?同样的问题也可以通过调用 WideFormatBuf 来解决,但我担心的是过多的额外字符可能被视为特殊字符、数学符号、国际事物等。
    【解决方案3】:

    小提示:不要将单引号 (') 转换为 &amp;apos; - 某些浏览器不理解此代码,因为 &amp;apos; 不是有效的 HTML

    详情见:“The Curse of &amp;apos;”和“XHTML and '

    (提到的两个 Delphi 单元都不转换单引号)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 2010-09-28
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      相关资源
      最近更新 更多