【问题标题】:Simple HTML form with POST to SQL function encoding problem?带有 POST 到 SQL 函数编码问题的简单 HTML 表单?
【发布时间】:2010-06-07 05:04:31
【问题描述】:

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

我不明白如何告诉表单正确发送西里尔字符。或者根本问题出在哪里?如何正确获取此字符?或者如何正确发送?

------------------编辑-----------

我不明白该放在哪里

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

【问题讨论】:

  • 你的查询不能只是$query = "SELECT quantity, ingredients, timing FROM other ORDER by id DESC";吗?
  • $db->setQuery('SET CHARACTER SET utf8; SET NAMES utf8;'); $db->loadResult(); (如果这不起作用,请单独发出命令)

标签: php mysql character-encoding


【解决方案1】:

尝试设置搭配?

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

【讨论】:

  • 对不起,我不明白该把代码放在哪里?在我的包含表单的 html 文件中,或者当我从数据库中获取数据时?
  • 其中一项就足够了
  • @Spoonk 无处不在。只需将其添加到您的连接语句所在的位置。每次连接数据库时,也要执行“SET NAMES utf8”查询,使用常用函数运行 mysql 查询。
  • 我仍然不知道如何...这样做...请参阅我的问题的编辑!提前致谢
【解决方案2】:

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

发布声明

SET NAMES UTF8

【讨论】:

  • 我不知道该怎么做......请参阅我的问题的编辑!提前致谢
【解决方案3】:

仔细检查您的数据库。我对俄语、爱沙尼亚语(变音符号)等使用了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 报告的错误。

【讨论】:

  • 无论版本如何,都应始终使用SET NAMES
【解决方案4】:

您只需在您的 $db 类中,在 select db 语句之后放置一个查询,SET NAMES。 使用的不是 mysql_query() 函数,而是用于执行所有其他查询的函数。

您能在此处发布您的 db 类中使用的连接语句吗?

【讨论】:

    【解决方案5】:

    您的问题可能是browser 而不是数据库。你应该encode将字符串插入到数据库中之前将其转换为utf8以确保。

    【讨论】:

      猜你喜欢
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多