我正在为我公司的支持团队使用Apache cordova构建一个应用程序,当我在UTF8中使用测试数据库时,一切正常。
然后,当我实现真正的数据库时,我注意到它是用win-1252编码的。
问题是,即使数据库与win-1252一样,我们也有很多行使用特殊字符,如“ç”,“〜”,“'”和“`”,当我运行php所有行时因为我的数据库中的表格不会显示。
请记住,我无法将数据库转换为utf8。
ps:我看到的解决方案是转到每一行并删除那些字符但不是一个好的解决方案(大约20,000行)
........................
PHP文件:
header("Access-Control-Allow-Origin: *");
$dbconn = pg_connect("host=localhost dbname=bdgestclientes2
user=postgres password=postgres")
or die('Could not connect: ' . pg_last_error());
$data=array();
$q=pg_query($dbconn,"SELECT * FROM clientes WHERE idcliente = 3");
$行= pg_fetch_object($ Q)){$数据[] = $行};
echo json_encode($ data);
答案 0 :(得分:1)
我只需要在php中添加一行来编码为unicode,这样我就可以使用数据并显示它的方式
pg_set_client_encoding($dbconn, "UNICODE");
答案 1 :(得分:0)
这应该不是问题。
Windows-1252支持“ç”(代码点0xE7),“〜”(代码点0x7E),“`”(代码点0x60)和“'”(代码点0xB4)。
PostgreSQL会自动将字符转换为数据库编码。
如果要存储在Windows-1252中出现 not 的字符,例如“Σ”,则会出现问题。 在这种情况下,正确的解决方案是使用具有不同编码的数据库(UTF8)。
如果你不能这样做,你必须将字符串存储为二进制对象(数据类型bytea
)并在应用程序中处理编码。只有在您不需要在数据库中处理这些函数时(例如,使用索引进行不区分大小写的搜索),这才能正常工作。
答案 2 :(得分:0)
我有一个类似的问题,我无法修改数据库设置,但我使用php的html实体编码来解决:
我从本机htmlentities中删除了html密钥元素,因为我使用的是wysiwyg编辑器,需要保留这样的内容。如果你没有这样的限制,你可以在字符串上使用htmlentities。
function makeFriendly($string)
$list = get_html_translation_table(HTML_ENTITIES);
unset($list['"']);
unset($list['\'']);
unset($list['<']);
unset($list['>']);
unset($list['&']);
$search = array_keys($list);
$replace = array_values($list);
$search = array_map('utf8_encode', $search);
str_replace($replace, $search, $string);
}
如果我需要实际字符,我总是可以在数据库字符串上调用html_entity_decode来获取“真正的”字符串。