我刚刚完成了从数据库中剥离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解码器,以及重建串…或东西…
/&#x(..);/
%1
我可以按查询继续吗?其中可能只有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)