我正在导入一个 csv 文件,其中包含另一个人发送给我的用户数据。该文件在多个人之间来回发送,在不同的操作系统上使用不同的程序。所以发生了一些编码问题,我发现没有简单的方法来修复它(是的,我将文件转换为 UTF-8 等)。
数据存储在 postgresql 数据库中,我找到了一种转换损坏字符的方法。
例如:
â\u0088\u009Aº = ü
â\u0088\u009A§ = ä
â\u0088\u009Aâ\u0088\u0082 = ö
...
在psql中,我使用以下语句转换â\u0088\u009Aº
为ü
:
SELECT COUNT(*) FROM sbl_students WHERE lastname ~* E'.*â\\u0088\\u009Aº.*';
=> 61
UPDATE sbl_students SET lastname = regexp_replace(lastname, E'â\\u0088\\u009Aº', 'ü', 'g');
SELECT COUNT(*) FROM sbl_students WHERE lastname ~* E'.*â\\u0088\\u009Aº.*';
=> 0
我试图将它实现到一个php脚本中,但由于某种原因它不起作用。什么都没有被替换,也没有发生错误。
$dbh = pg_connect("dbname=iserv user=sbl");
$query = "UPDATE sbl_students SET lastname = regexp_replace(lastname, E'â\\u0088\\u009Aº', 'ü', 'g');";
pg_query($dbh, $query);
pg_close($dbh);
我已经尝试了多种变体,例如regexp_replace(lastname, E'â\u0088\u009Aº', 'ü', 'g')
或regexp_replace(lastname, 'â\u0088\u009Aº', 'ü', 'g')
但没有一个有效。
有人可以帮帮我吗?我不明白为什么查询在 psql 中效果很好,但在 php 中没有做任何事情。
谢谢!
Postgresql 8.4
PHP 5.3.3-7+squeeze16 和 Suhosin-Patch (cli)