Delphi的最佳HTML编码器?

时间:2010-06-23 21:38:43

标签: html delphi encoding

使用HTTPapp.HTMLEncode(字符串)时,我的数据似乎已损坏:字符串;

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 个答案:

答案 0 :(得分:5)

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

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

或者,看看this SO question

答案 1 :(得分:3)

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

HTMLEncode例程基本上是正确的,除此之外,它很短。你可能只是制作自己的副本。它调用FormatBuf,它提供了5个参数。第二个和第四个是整数值。

,每次调用都将它们加倍(只有四个)

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

答案 2 :(得分:3)

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

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

(提到的两个德尔福单位都没有转换单引号)。