如何使用PHP将日文文本插入Postgres表?

时间:2009-06-27 11:36:00

标签: php postgresql unicode

我想把“翻译るす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>

3 个答案:

答案 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()