PostgreSQL – 替换HTML实体

我刚刚开始从我们的数据库删除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实体,比如/\u0026amp; #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)

相关文章

来源:http://www.postgres.cn/docs/11/ 4.1.1. 标识符和关键词 SQL标识符和关键词必须以一个...
来源:http://www.postgres.cn/docs/11/ 8.1. 数字类型 数字类型由2、4或8字节的整数以及4或8...
来源:http://www.postgres.cn/docs/11/ 5.1. 表基础 SQL并不保证表中行的顺序。当一个表被读...
来源:http://www.postgres.cn/docs/11/ 6.4. 从修改的行中返回数据 有时在修改行的操作过程中...
来源:http://www.postgres.cn/docs/11/ 13.2.1. 读已提交隔离级别 读已提交是PostgreSQL中的...
来源:http://www.postgres.cn/docs/11/ 9.7. 模式匹配 PostgreSQL提供了三种独立的实现模式匹...