无法在字符串中使用撇号

时间:2015-06-07 09:18:08

标签: delphi delphi-xe8

所以我花了一个小时试图让它发挥作用。我正在对TWebBrowser进行一些测试,所以我可以在项目中应用我的发现。我想测试不同的加载内容的方法(URL,LoadFromStrings()和EvaluateJavaScript())。问题是,我无论如何都不能将一个简单的字符串传递给最后一个方法而不会被错误地包含在撇号中。

procedure TForm1.FormCreate(Sender:TObject);
const S='<span style="color:red">ABC</span><span style="color:green">ABC</span><span style="color:blue">ABC</span>';
begin
WebBrowser1.LoadFromStrings('<html><body><div id="target">[x]</div></body></html>','');
WebBrowser1.EvaluateJavaScript('document.getElementById("target").insertAdjacentHTML('+
'"beforend",'#39+S+#39');');
end;

见#39?如果没有它们,字符串将完全没有撇号发送,因此生成的JavaScript脚本无效。如果它们仍然存在,我会在字符串的每一端都有两个撇号,但仍然会弄乱脚本。这是什么?

1 个答案:

答案 0 :(得分:6)

我的pshychic调试告诉我你正在查看调试器中的字符串。单引号是字符串分隔符。所以它需要被转义。通过加倍来逃避它。因此,当调试器显示如下字符串时:

.fade {
        background-color: red;
    width: 200px;
    height: 200px;  
   opacity: 0.4;
    filter: alpha(opacity=40); /* For IE8 and earlier */
   transition: opacity .25s ease-in-out;
   -moz-transition: opacity .25s ease-in-out;
   -webkit-transition: opacity .25s ease-in-out;
    cursor: pointer;
   }

   .fade:hover {
      opacity: 1;
      }

实际上是三个字符长,中间字符是单引号。

所以

<div class='fade'></div>

输出

a'b

或者在代码中使用示例,请考虑以下完整程序:

'a''b'

该程序输出:

Writeln('a''b');

如果您想避免使用硬编码字符代码,可以使用这样的转义单引号:

{$APPTYPE CONSOLE}
const
  S = '<span style="color:red">ABC</span>';
begin
  Writeln(#39 + S + #39);
end.