欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Delphi XE 10.2.3使用CEF4Delphi取网页元素时碰到 变问号?的处理

程序员文章站 2022-06-15 15:33:40
用CEF4Delphi取网页元素时碰到ElementInnerText里含有" " 比如网页源码里是"内容 "取出来显示就变成"内容?" 搜索大部分是说把" "替换成其它字符即可 但实际操作怎么也替换不了,就算变量为AnsiString也不行 最后用了以下方法解决 参考 ......

用cef4delphi取网页元素时碰到elementinnertext里含有" "

比如网页源码里是"内容 "取出来显示就变成"内容?"

搜索大部分是说把" "替换成其它字符即可

但实际操作怎么也替换不了,就算变量为ansistring也不行

最后用了以下方法解决

参考网页:

https://blog.csdn.net/qq_29683707/article/details/80860904

关于&nbsp空格转成正常空格‘ ’的方法

 1>先把字符串转码 let data = encodeuri(要转化的值)

 2>接下来替换掉&nbsp空格 data = data .replace(/%c2%a0/g,'%20');
 3>再转回来就ok了 data = decodeuri(data);

要用到encodeuri,找到delphi版的

http://www.delphitop.com/html/zifuchuan/2599.html

 

方法1
user  httpapp; 

httpencode(ansitoutf8('中文'));


方法2
uses
  iduri;

..
begin
  s := tiduri.urlencode(str);
//
  s := tiduri.urldecode(str);
end;

使用方法2的tiduri.urlencode,程序出错,原因不明

使用方法1成功

直接 tmptitle:= httpencode(tmptitle); 即可

但编译器提示警告

[dcc32 warning] uminibrowser.pas(469): w1000 symbol 'httpencode' is deprecated: 'use tnetencoding.url.encode'
[dcc32 warning] uminibrowser.pas(471): w1000 symbol 'httpdecode' is deprecated: 'use tnetencoding.url.decode'
[dcc32 hint] uminibrowser.pas(469): h2443 inline function 'httpencode' has not been expanded because unit 'system.netencoding' is not specified in uses list
[dcc32 hint] uminibrowser.pas(471): h2443 inline function 'httpdecode' has not been expanded because unit 'system.netencoding' is not specified in uses list

 

意思是httpencode和httpdecode已经弃用请用tnetencoding.url.encode和tnetencoding.url.decode

点进httpencode看看

function httpdecode(const astr: string): string;
begin
  result := tnetencoding.url.decode(astr);
end;

function httpencode(const astr: string): string;
begin
  result := tnetencoding.url.encode(astr);
end;

其实就直接调用了

tnetencoding.url.encode

所在单元是 system.netencoding