2009-06-27 103 views
1

我正在特林增加 “翻訳するテキストや网络ページ” 到PostgreSQL表,但这个样子的:如何使用PHP将日文文本插入到Postgres表中?

"& #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> 

回答

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的手柄归类更好,所以如果你不是太远沿,并且需要多个排序规则那么它可能是一个好主意,切换)

+0

我需要使用哪种归类? – coderex 2009-06-27 11:51:21

+0

- - PostgreSQL数据库转储 - - 开始于2009-06-27 17点22分32秒 SET CLIENT_ENCODING = 'utf-8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off; SET search_path = public,pg_catalog; SET default_tablespace =''; SET default_with_oids = false; - - TOC entry 1466(class 1259 OID 71803) - 依赖项:3 - 名称:table1;类型:TABLE;架构:公开;所有者:prasanth;表空间: - CREATE TABLE table1( id integer NOT NULL, japan character(1000) ); – coderex 2009-06-27 11:53:32

1

在我看来,PG存储值正确,因为32763等于十六进制7FFB等于翻(wiki

可能您在显示数据时遇到问题?字符串列是否有单独的支持Unicode的数据类型?你用pgAdmin检查了你的表的实际内容是什么?

1

看来问题根本与数据库无关。

只是你的HTML缺乏编码声明(实际上没有可靠的HTML默认编码,你会得到垃圾)。

添加相应的<meta>标记或发送Content-Type标题与charset参数。


BTW:代码中存在SQL注入漏洞。请勿将请求变量放入查询中。使用准备好的语句或至少始终使用pg_quote()

相关问题