无法在字符串中使用撇号
Unable to use apostrophes in a string
所以我只花了一个小时试图让它工作。我正在对 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 脚本无效。如果它们仍然存在,我会在字符串的每一端得到两个撇号,仍然会弄乱脚本。这是什么?
我的心理调试告诉我你正在调试器中查看字符串。单引号是字符串分隔符。所以需要转义。它通过加倍来逃脱。所以当调试器显示这样的字符串时:
'a''b'
实际上是三个字符长,中间字符是单引号。
所以
Writeln('a''b');
产出
a'b
或者要在您的代码中使用示例,请考虑这个完整的程序:
{$APPTYPE CONSOLE}
const
S = '<span style="color:red">ABC</span>';
begin
Writeln(#39 + S + #39);
end.
这个程序输出:
'<span style="color:red">ABC</span>'
如果您想避免使用硬编码字符代码,您可以像这样使用转义单引号:
Writeln('''' + S + '''');
所以我只花了一个小时试图让它工作。我正在对 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 脚本无效。如果它们仍然存在,我会在字符串的每一端得到两个撇号,仍然会弄乱脚本。这是什么?
我的心理调试告诉我你正在调试器中查看字符串。单引号是字符串分隔符。所以需要转义。它通过加倍来逃脱。所以当调试器显示这样的字符串时:
'a''b'
实际上是三个字符长,中间字符是单引号。
所以
Writeln('a''b');
产出
a'b
或者要在您的代码中使用示例,请考虑这个完整的程序:
{$APPTYPE CONSOLE}
const
S = '<span style="color:red">ABC</span>';
begin
Writeln(#39 + S + #39);
end.
这个程序输出:
'<span style="color:red">ABC</span>'
如果您想避免使用硬编码字符代码,您可以像这样使用转义单引号:
Writeln('''' + S + '''');