简单的HTML表单与POST到SQL函数编码问题?

时间:2010-06-06 19:52:20

标签: php mysql character-encoding

我有一个简单的html表单,用POST函数提交信息。但是当信息包含西里尔字符时,在MySql的表格中会出现азазаза符号而不是文本。该表位于utf-8_general_ci上,该站点采用UTF-8编码。我使用

可视化此表中的结果
$query = "
  SELECT ".$db->nameQuote('ingredients')."
    FROM ".$db->nameQuote('other')."
    ORDER by id DESC
  ";
$db->setQuery($query);
$ingredients = $db->loadResult();

我无法理解如何告诉表单发送chyrillic字符是正确的。或者问题出在哪里?如何正确获取此字符?或者如何正确发送它们?

----------------- EDIT -----------------------

我无法理解放在哪里

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();

5 个答案:

答案 0 :(得分:1)

尝试设置搭配?

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

答案 1 :(得分:0)

азазаза显示是因为您正在将包含азазаза的UTF-8字节流解释为ISO-8859-1。确保将客户端编码设置为UTF-8,以便数据库知道您正在发送UTF-8字节流。

发出声明

SET NAMES UTF8

答案 2 :(得分: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");

是的,正如大家在这里所说,我也在使用

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

在数据库类有条件地为MySQL 4.x ,但不适用于MySQL 5.在那里工作正常,如果我没记错的话,这是4.1报告的错误。

答案 3 :(得分:0)

你必须在select db语句之后立即在$ db类中放入一个查询SET NAMES。 不使用mysql_query()函数,而是用于执行所有其他查询的函数。

你可以在这里发布你的db类中使用的connect语句吗?

答案 4 :(得分:0)

您的问题可能是browser而不是数据库。在将字符串插入数据库之前,应将encode字符串设置为utf8以确保。