小编典典

PostgreSQL-替换HTML实体

sql

我刚刚完成了从数据库中剥离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个左右。


阅读 262

收藏
2021-05-05

共1个答案

小编典典

使用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)
2021-05-05