2009-06-27 99 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()

相關問題