回答

收藏

PostgreSQL-替换HTML实体

技术问答 技术问答 151 人阅读 | 0 人回复 | 2023-09-13

我刚刚完成了从数据库中剥离HTML实体的任务,因为我们进行了很多爬网,并且某些爬网程序在输入时没有这样做
6 i- \/ l; l1 [  x6 ]- F' z! n因此,我开始编写一堆看起来像这样的查询;5 g6 d) w5 j/ u5 G2 H/ N4 m
UPDATE nodes SET name=regexp_replace(name, 'à', 'à', 'g') WHERE name LIKE '%#xe0%';
% f* r) S- i) d1 C4 pUPDATE nodes SET name=regexp_replace(name, 'á', 'á', 'g') WHERE name LIKE '%#xe1%';: A/ `# A7 d8 `0 R) G' `
UPDATE nodes SET name=regexp_replace(name, 'â', 'a', 'g') WHERE name LIKE '%#xe2%';) S; x; y& n  ^7 N' m6 {  Q% G3 e
0 N0 H; T: a6 M# x
显然,这是一种非常幼稚的方法。我一直在尝试找出解码功能是否可以做些聪明的事情。也许通过正则表达式抓住HTML实体一样/&#x(..);/,然后通过
+ D8 k; g9 |0 \% B5 T: e刚刚 的%1部分到ASCII解码器,以及重建串…或东西…
% ~) @) I3 p  ?; ?  V我可以按查询继续吗?其中可能只有40个左右。- _) o  {3 s3 Z+ j; G; b6 _+ `1 i
               
6 ~7 b) ]" t. U8 \解决方案:
5 \; D7 _2 o8 T; F                2 g7 D. E  _! o2 V( `

! Z. V+ k1 p  I5 L6 j  c6 C& F6 d/ I$ Q, p
                使用pl /
0 I* S6 ?1 v; u& D+ l, pperlu编写函数并使用此模块https://metacpan.org/pod/HTML::Entities
0 {# @2 a7 W  o当然,您需要安装perl并提供pl / perl。6 y" u9 F+ U# G/ ^! {+ s
1) 首先创建程序语言pl / perlu:
" |& D' A- ~/ y# }( l9 c. ECREATE EXTENSION plperlu;
* I7 z+ O, F: v! W& s+ B4 ?0 i& n2) 然后创建一个像这样的函数:
/ _. l+ U2 W$ u# S$ E( Y( Y) BCREATE FUNCTION decode_html_entities(text) RETURNS TEXT AS $$
2 t+ }' Y' l- `# O# g# O    use HTML::Entities;
) L# S, C6 `2 t" h    return decode_entities($_[0]);
* q. U  x& ^8 h2 a$$ LANGUAGE plperlu;. |$ u& v5 C/ r, v/ {  ^
3) 然后可以像这样使用它:9 g, `- Z% ?) X5 l' O) g4 ~1 [
select decode_html_entities('aaabbb&.... asasdasdasd …');7 \: N2 h9 u. O3 h- d
   decode_html_entities    9 p. ^0 w+ I  z) y% q: }2 S& L
---------------------------! q( {$ X; g% k7 l$ a1 F
aaabbb&.... asasdasdasd 鈥?/ R+ j3 P% W9 K; k1 H; f; a; ^
(1 row)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则