使用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()来修复。
答案 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)
小提示:不要将单引号(')转换为'
- 某些浏览器不理解此代码,因为 '
无效HTML
有关详细信息,请参阅:“The Curse of '
”和“ XHTML and ' ”
(提到的两个德尔福单位都没有转换单引号)。