我刚才已经着手从我们的数据库中剥离出来的HTML实体的任务,因为我们做了很多抓取和一些爬虫并没有在输入时间做到这一点:(
于是我开始写一堆看起来像查询;
UPDATE nodes SET name=regexp_replace(name, 'à', 'à', 'g') WHERE name LIKE '%#xe0%';
UPDATE nodes SET name=regexp_replace(name, 'á', 'á', 'g') WHERE name LIKE '%#xe1%';
UPDATE nodes SET name=regexp_replace(name, 'â', 'â', 'g') WHERE name LIKE '%#xe2%';
这显然是一个非常幼稚的做法。 我一直在试图找出是否有一些聪明我可以用解码功能做; 也许通过正则表达式抓住HTML实体喜欢/&#x(..);/
,然后只是路过%1
部分将ASCII解码器,以及重建串...或东西...
我将只按上查询? 有可能只有40个左右的人。
使用PL / perlu编写一个函数,使用这个模块https://metacpan.org/pod/HTML::Entities
当然,你需要安装Perl和PL / perl的使用。
1)首先创造的过程语言PL / perlu:
CREATE EXTENSION plperlu;
2)然后,创建这样的功能:
CREATE FUNCTION decode_html_entities(text) RETURNS TEXT AS $$
use HTML::Entities;
return decode_entities($_[0]);
$$ LANGUAGE plperlu;
3)然后你可以使用它像这样:
select decode_html_entities('aaabbb&.... asasdasdasd …');
decode_html_entities
---------------------------
aaabbb&.... asasdasdasd …
(1 row)
您可以使用XPath(HTML编码的内容是相同的XML编码的内容):
select
'AT&T' as input ,
(xpath('/z/text()', ('<z>' || 'AT&T' || '</z>')::xml))[1] as output