代码之家  ›  专栏  ›  技术社区  ›  wfoster

Delphi的最佳HTML编码器?

  •  5
  • wfoster  · 技术社区  · 14 年前

    似乎我的数据在使用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()来解决。

    3 回复  |  直到 4 年前
        1
  •  5
  •   Community Erin Dees    7 年前

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

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

    this SO question .

        2
  •  3
  •   Mason Wheeler    14 年前

    您可能正在使用Delphi2009或2010。在我看来,他们好像忘了更新Unicode的HTMLEncode。它将错误的缓冲区长度传递给FormatBuf。

    HTMLEncode例程基本上是正确的,除此之外,它非常简短。你可以自己复制。无论在哪里调用FormatBuf,它都给出5个参数。第二个和第四个是整数值。在每次通话中都要加倍(只有四个),然后就可以了。

    另外,你应该开一家 QC 报告一下,这样就可以修好了。

        3
  •  3
  •   mjn anonym    14 年前

    小提示:不要将单引号(')转换为 &apos; -某些浏览器不理解此代码,因为 &载脂蛋白;

    有关详细信息,请参见:“ The Curse of &apos; “和” XHTML and ' "

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