2010-06-06 78 views
1

我有一個簡單的HTML表單,用POST函數提交信息。但是當信息包含一個西里爾文字符時,在MySql中的表格中就會變成ааааза符號而不是文本。該表位於utf-8_general_ci上,該網站使用UTF-8編碼。我想象這個表的結果與POST與SQL函數編碼問題的簡單HTML表單?

$query = " 
    SELECT ".$db->nameQuote('ingredients')." 
    FROM ".$db->nameQuote('other')." 
    ORDER by id DESC 
    "; 
$db->setQuery($query); 
$ingredients = $db->loadResult(); 

我不能理解如何告訴窗體發送正確的字體。或者問題在哪裏?如何正確獲取這些字符?或者如何正確發送它們?

-----------------編輯-----------------------

我不明白哪裏放

mysql_query("SET CHARACTER SET utf8"); mysql_query("SET NAMES utf8");

所以我在這裏貼上我的代碼。首先,簡單的形式:

<form action="insert.php" method="post" onsubmit="return checkForm(this)" target="_top"> 
<table> 

<tr> 
<td colspan="2"> 
<ul> 
<li> Добавете необходимите за рецептата съставки</li> 
<li> Моля попълнете всички полета коректно</li> 
<li> Полетата маркирани с (*) са задължителни</li> 
</ul> 
</td> 
</tr> 

<tr> 
<td> 
Количество (порции)*: 
</td> 
<td> 
<input type="text" name="quantity" /> 
</td> 
</tr> 

<tr> 
<td> 
Съставки*: 
</td> 
<td> 
<input type="text" name="ingredients" /> 
</td> 
</tr> 

<tr> 
<td> 
Време за приготвяне*: 
</td> 
<td> 
<input type="text" name="timing" /><br /> 
</td> 
</tr> 

<tr> 
<td></td> 
<td> 
<input type="submit" value="Напред" class="button validate" /> 
</td> 
</tr> 
</table> 
</form> 

而且我insert.php文件中的取語法:

$query = " 
    SELECT ".$db->nameQuote('quantity')." 
    FROM ".$db->nameQuote('other')." 
    ORDER by id DESC 

    "; 
$db->setQuery($query); 
$quantity = $db->loadResult(); 

$query = " 
    SELECT ".$db->nameQuote('ingredients')." 
    FROM ".$db->nameQuote('other')." 
    ORDER by id DESC 
    "; 
$db->setQuery($query); 
$ingredients = $db->loadResult(); 

$query = " 
    SELECT ".$db->nameQuote('timing')." 
    FROM ".$db->nameQuote('other')." 
    ORDER by id DESC 
    "; 
$db->setQuery($query); 
$timing = $db->loadResult(); 
+0

你的查詢不能只是'$ query =「選擇數量,成分,時間從其他訂單編號DESC」;'? – 2010-06-06 20:35:27

+0

$ db-> setQuery('SET CHARACTER SET utf8; SET NAMES utf8;'); $ db-> loadResult(); (如果這不起作用,請分別發出命令) – Robus 2010-06-07 17:25:59

回答

1

嘗試設置的搭配?

mysql_query("SET CHARACTER SET utf8"); 
mysql_query("SET NAMES utf8"); 
+0

對不起,但我不知道該把代碼放在哪裏?在我的html文件中包含表單,或者當我從數據庫中獲取數據? – Spoonk 2010-06-06 20:04:45

+0

只有其中之一就夠了 – 2010-06-06 20:05:40

+0

@Spoonk無處不在。只需將其添加到您的連接語句所在的位置即可。每次連接到數據庫時,都要執行「SET NAMES utf8」查詢,並使用通常的函數來運行mysql查詢。 – 2010-06-06 20:12:05

0

азазаза顯示出來,因爲你解釋包含азазаза爲ISO-8859-一個UTF-8字節流1。確保將客戶端編碼設置爲UTF-8,以便數據庫知道您正在向其發送UTF-8字節流。

問題的聲明

SET NAMES UTF8 
+0

我不知道該怎麼做......請執行此操作...請參閱我的問題的編輯!在此先感謝 – Spoonk 2010-06-06 20:22:10

0

仔細檢查您的數據庫。我已經使用了utf8_unicode_ci排序俄羅斯,愛沙尼亞語(元音變音)等,並確保表格以UTF-8發佈,沒有問題。

如果你繼續這樣一些多字節的PHP中的硬編碼UTF-8的東西,它是最好的,以確保內部PHP編碼是合適的,以及:

mb_internal_encoding("UTF-8"); 
mb_http_output("UTF-8"); 
ob_start("mb_output_handler"); 

是的,正如你們在這裏說,我M還採用

@mysql_query("SET NAMES 'utf8'"); 

數據庫類有條件的MySQL 4.x的,但不爲MySQL 5,做工精細那裏,據報道爲4.1,如果我沒有記錯的錯誤。

+0

應該始終使用SET NAMES,無論版本 – 2010-06-06 20:09:01

0

你必須在你的$ db類中只有一個查詢,SET NAMES之一,在選擇db語句之後。 使用不是mysql_query()函數,而是用於執行所有其他查詢的函數。

你可以在這裏發佈你的db類中使用的連接語句嗎?

0

您的問題可能是browser而不是數據庫。在將其插入數據庫之前,您應該將其字符串轉換爲utf8以確保。