Delphi最佳HTML编码器是什么?

5

当使用HTTPapp.HTMLEncode(string):String时,我的数据似乎会出现损坏。

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

这不正确,它有损我的数据。是否有人有更好的 VCL 组件建议?除了花时间编码所有的情况外。 更新 在更深入地了解 HTML 后,我发现没有必要对链接中提到的其他字符进行编码。你只需要知道这四个 HTML 保留字符即可。 http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
&,<,>,"

VCL HTTPApp.HTMLEncode() 函数的问题是由于缓冲区大小和新的 Delphi 2009/2010 规范中默认 Unicode 字符串类型引起的。可以按照 @mason 的说法进行修复,也可以使用 WideFormatBuf() 调用来代替当前使用的 FormatBuf() 进行修复。

3个回答

5

将字符串中的 <、>、& 和 " 字符替换是微不足道的。因此,您可以轻松编写自己的程序来实现这一点。(如果您的 HTML 页面是 UTF-8,则绝对没有理由对任何其他字符进行编码,例如 U+222B(积分符号)。)

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

或者,您可以查看这个 SO 问题


另一个链接到的SO问题促使我编写了这个HTMLEncode函数:http://xxm.svn.sourceforge.net/viewvc/xxm/trunk/Delphi/public/xxm.pas?revision=88&view=markup#l222 - Stijn Sanders

3
您可能正在使用Delphi 2009或2010。看起来他们忘记为Unicode更新HTMLEncode。它将错误的缓冲区长度传递给FormatBuf。
除此之外,HTMLEncode程序基本正确,并且非常简短。您可以自己制作副本。在每个调用FormatBuf的地方,它都提供5个参数。第二个和第四个是整数值。在每个调用中将它们都加倍,(只有四个),然后它就能正常工作了。
此外,您应该在QC上打开报告,以便修复它。

我在他们的代码中看到,他们只寻找以下字符: Convert = ['&','<','>','"']; 是否应该扩展以适应所有HTML特殊字符?同样的问题也可以通过调用WideFormatBuf来解决,但我的担忧是可能会有大量额外的被认为是特殊的字符,如数学符号、国际字符等。 - wfoster

3
小提示:不要将单引号(')转换为&apos; - 一些浏览器不理解此代码,因为&apos;不是有效的HTML
详情请参见:“The Curse of &apos;”和“XHTML and '”。
(提到的两个Delphi单元都不会转换单引号)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接