我想把“翻译るすWeb Web Web Web Web Web”“添加到PostgreSQL表格中,但它显示如下:
"& #32763;""& #35379;"す& #12427;テ& #12461;& #12473;& #12488;& #12420;Web& #12506;& #12540;& #12472;
如何以正确的格式插入?
<?php
$db = pg_connect("host=localhost port=5432 dbname=lang user=password=") or die(":(");
pg_set_client_encoding($db , "UTF-8");
#pg_exec($db,"SET NAMES 'UTF-8'");
#pg_exec($db,"SET CLIENT_ENCODING TO 'UTF-8'");
//$lan=iconv("UTF-8",'ISO-8859-1//TRANSLIT',$_REQUEST['lan']);
$lan=$_REQUEST['lan'];
echo $lan;
if(array_key_exists('sub',$_REQUEST))
{
$sql="INSERT INTO table1 (japan) VALUES('{$lan}')";
pg_query($sql) or die("errot");
}
?>
<html>
<body>
<form action="" method="">
<input type="text" name="lan" />
<input type="submit" name="sub" />
</form>
</body>
</html>
答案 0 :(得分:1)
只要table1
具有正确的归类
请参阅http://www.postgresql.org/docs/8.1/static/sql-createdatabase.html以设置编码(数据库范围)
请参阅http://www.postgresql.org/docs/8.1/static/multibyte.html了解可用的角色支持以及如何使用它们
修改强>
请注意,php提供pg_set_client_encoding()来更改编码,但是,就像执行相同操作的直接sql查询一样,它会将从后端编码转换为所请求的客户端编码,并没有帮助插入。为此,数据库/ postreSQL必须具有正确的编码集(请参阅前两个引用)。
(注意:mysql可以更好地处理归类很多,所以如果你不太远,你需要多个归类,那么切换可能是个好主意)
答案 1 :(得分:1)
在我看来,PG正确存储值,因为32763等于十六进制7FFB等于翻(wiki)
显示数据可能有问题吗?字符串列是否有单独的启用Unicode的数据类型?您是否使用pgAdmin检查了表格的实际内容是什么?
答案 2 :(得分:1)
似乎该问题根本与数据库无关。
只是你的HTML缺少编码声明(实际上,没有可靠的HTML默认编码,你会得到垃圾)。
添加适当的<meta>
代码或使用Content-Type
参数发送charset
标头。
顺便说一下:你的代码中有SQL注入漏洞。不要将请求变量放在查询中。使用预准备语句或至少始终使用pg_quote()
。