清除PG table column 中的 non break space

清除PG cell中的 non break space.

问题描述

Postgresql 10.4.

现有 table posters, 含 column content_html, content_html 中可能包含类似<td>&nbsp;</td>的内容。需要移除该column中的出现的non-break space,但该column 关联其他的attribute,不能直接使用replace来修改,需要先找到对应的poster记录,然后一并修改。

尝试查找对应记录:

Poster.where("content_html LIKE ?", '%&nbsp;%')

无效。

解决方法

Google后尝试:

Poster.where("content_html LIKE ?", "%\xc2\xa0%")

看stack overflow上Replacing nonbreaking spaces (%A0) in Postgres,有人说该方法无效,可能是PG版本问题?PG 10.4是可以的。

或者改用Unicode characters:

Poster.where("content_html LIKE ? OR content_html LIKE ?", "%\u00a0%", "%\u2002%")

更新时,使用:

poster.content_html.tr("%\xc2\xa0%", " ")
# or
poster.content_html.tr("%\u00a0%", " ")
poster.content_html.tr("%\u2002%", " ")

参考

Replacing nonbreaking spaces (%A0) in Postgres

Unicode Characters in the ‘Separator, Space’ Category)