2010-08-04 70 views
1

我已經PostgreSQL的PHP​​和bytesequence問題

即使這一切設置HTML元標記UFT8 同樣形式的字符集爲utf8 要尤伯杯確保我有運行PHP函數函數utf8_encode()對違規串當通過php函數pg_query執行查詢時,我得到一個postgres錯誤。

然而,當我複製並粘貼到命令行查詢它執行得很好。

查詢(或至少有問題的部分): INSERT INTO位置 (... alt_thorfare_name ...)VALUES(... 'BÓTHARGHLEANN /SHEÁIN' ...);

錯誤: 查詢失敗:ERROR:無效字節序列編碼UTF8:0xd354 提示:也會出現這種錯誤,如果字節序列不匹配由服務器所期望的編碼,這是由CLIENT_ENCODING

控制

問題是在O和A上的fada(來自愛爾蘭語的尖銳口音)。

我完全停留在甚麼嘗試尋找解決方案的旁邊。 任何幫助表示讚賞

+1

您應該刪除'utf8_encode',它可能會對字符進行雙重編碼。另外,我不知道pg,但是*連接*也設置爲UTF-8?你檢查過'client_encoding'嗎? – 2010-08-04 09:47:42

回答

1

To be uber sure i have run the php function utf8_encode() on the offending string

這就是事情出錯,你不必UTF8編碼爲utf8,它已經UTF8。

2

發生此錯誤是因爲您實際上沒有將UTF-8數據傳遞到pg_query

0xd354實際上並不是有效的UTF-8序列,它是「ÓT」的ISO-8859-1序列。請參閱:

header("Content-type: text/plain"); 
$s = "ÓT"; 
$utf8 = mb_convert_encoding($s, "UTF-8", "HTML-ENTITIES"); 
$u = unpack("H*", $utf8); 
echo "UTF-8 byte sequence: " . reset($u),"\n"; 
$iso8859 = mb_convert_encoding($s, "ISO-8859-1", "HTML-ENTITIES"); 
$u = unpack("H*", $iso8859); 
echo "ISO-8859-1 byte sequence: " . reset($u),"\n"; 

 
UTF-8 byte sequence: c39354 
ISO-8859-1 byte sequence: d354 

這樣做:

  • 不要使用utf8_encode()除非也許你從什麼地方得到的ASCII數據(外部純文本文件,例如)。
  • 將您的PHP文件編碼爲UTF-8無BOM