我有一个简单的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();
答案 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)