2012-06-11 62 views
4

我想在將丹麥字符發送到數據庫之前進行編碼。無法在PHP中對字符進行編碼(錯誤的字符串值)

我嘗試這個功能適用於他們:

private function process_array_elements(&$element){ 
    $element = utf8_encode($element); 
    $element = strip_tags( $element); 
    $element = strtolower (trim ($element) ); 
    $element = mysql_real_escape_string($element); 
    return $element; 
} 

像這樣:

$this->check_line_two = $this->process_array_elements($e); 

現在,每當我試圖將字符串發送到數據庫:

mysql_query("SET NAMES 'utf8'"); 
$query="INSERT INTO result_scanned 
      SET line_one= '$this->check_line_one', 
       line_two='$this->check_line_two', 
       line_three='$this->check_line_three', 
       advert_id='$this->advert_id', 
       scanned='$this->scan_result'"; 

我得到這個:

Incorrect string value: '\xE3\x83\xE2\xB8r ...' for column 'line_three' at row 1 

在表中的字段的數據類型是UTF-8(utf8_unicode_ci),所以我必須使用相同的

此線程與我的問題我的編碼字符串:Detect encoding and make everything UTF-8

但是,在將數據插入數據庫之前,我需要知道如何將任何字符編碼爲UTF-8,否則,會出現上述錯誤。我認爲我需要首先確定在將它們放入數據庫之前我接受的是什麼類型的角色。

+0

你做'$這個 - > check_line_two',但SQL扼流圈'列「line_three」 ' –

+0

停止使用'mysql_'方法。他們年紀大了,很容易把事情搞砸。相反,使用[PDO](http://php.net/pdo)。另外,你的函數'process_array_elements'(這是一個錯誤的方法名稱,因爲它與數組無關,並且它可以處理任何類型的字符串 - 不只是來自數組的東西)正在使用'$ elements '作爲參考,但仍然返回結果。這很混亂,可能會導致意想不到的副作用。 – kba

+0

謝謝,克里斯汀,雖然它不涉及到問題 –

回答

4

utf8_unicode_ci是整理,你所需要的字符集utf8還有:

CREATE TABLE someTable DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci; 

良好的措施,確保連接到MySQL和PHP當一切UTF-8:

mysql_connect ("localhost", "DB_USER", "DB_PASSWORD") or die (mysql_error()); 
mysql_select_db ("DATABASE_NAME") or die (mysql_error()); 

mysql_query("SET character_set_client=utf8"); 
mysql_query("SET character_set_connection=utf8"); 
mysql_query("SET character_set_database=utf8"); 
mysql_query("SET character_set_results=utf8"); 
mysql_query("SET character_set_server=utf8"); 
mysql_query("SET NAMES 'utf8'"); 

這就是我在我運行的Hebrew gibberish translation網站上連接的方式,它處理我自己或用戶投擲的所有內容。

+0

它可以幫助..但也有一個probelm,我與不同的角色工作..我想我需要編碼他們之前把它們放入數據庫...否則我得到一個錯誤 –

+0

只要確保HTML頁面也是UTF-8,MySQL表格具有正確設置的DEFAULT CHARACTER SET,並連接到數據庫,如我所示。不要嘗試在PHP中對字符進行編碼以保存在數據庫中(但請將它們消毒!)。如果您計劃對電子郵件進行編碼或寫入文件,則只需對這些字符重新編碼。即使在這些情況下,您也應該考慮將其保留爲UTF-8。 – dotancohen

+0

我得到這些錯誤拋出,如果我沒有編碼的字符puttin gthem進入數據庫之前 –

0
Incorrect string value: '\xE3\x83\xE2\xB8r ...' for column 

我只得到這個錯誤,當我使用strtolower

我的數據庫和整理都是UTF-8,有全線字符沒有問題。我有一個處理日語,俄語,中國等沒有任何問題的語言數據庫表。該錯誤只彈出,當我試圖strtolower

你跟單碼字符工作時需要使用PHP的mb_strtolower

相關問題