使用PHP将文本插入MySQL数据库时出现问题

时间:2011-06-27 12:28:16

标签: php mysql character-encoding

我正在尝试使用PHP从表单中将文本插入MySQL数据库 问题是,当我检查phpmyadmin中的DataBase时,我发现像ü,ö,ä,è,é,à等特殊字符被破坏了,我得到像üöäéèÃ这样的东西。我试过了以下内容:

  • accept-charset="latin1_swedish_ci"放入<form>标记
  • 在php.ini文件中设置default_charset = "latin1_swedish_ci"
  • mysqli_set_charset($dbc, 'latin1_swedish_ci');mysql_query('SET NAMES latin1_swedish_ci');放在mysqli_connect()函数
  • 之后
  • 将数据库,表格和各列的排序规则设置为latin1_swedish_ci

我注意到直接在phpmyadmin中运行查询的值没有被破坏,所以我认为错误必须是PHP和/或MySQL连接中的错误。
此外,我尝试使用utf-8_general_ci执行相同操作,并获得相同的结果。 这似乎忽略了我做的任何事情 建议和想法欢迎。谢谢你们,
肖恩

6 个答案:

答案 0 :(得分:3)

不确定您是否尝试过此操作...但是在将希伯来语插入MySQL数据库时遇到了同样的问题。 我做了以下事情: 数据库表的排序规则为:utf8_unicode_ci

在PHP中我这样做:

@ $db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
$db->set_charset('utf8');

我创建了一个新连接,而不是将连接指定为UTF-8。

这在处理希伯来语时解决了我的问题...

答案 1 :(得分:3)

我无法正确地说这是否是导致问题的原因,但无论如何你都不能把charset和collat​​ion的Mysql说明符放到HTML表单中,也不能放到PHP.ini中。

现在你有点盲目地使用MySQL值并把它放在你认为合适的任何地方 - 甚至不知道。不要那样做。首先确定要使用和接受的编码。根据您的问题,我会说 latin1

所以适当地配置HTML和PHP:

<form accept-charset="latin1">

对于HTML表单元素。请注意,HTML中没有latin1_swedish_ci,请参阅HTML docs

下一个类似的点在你的php.ini设置中。没有像你放在那里的东西。将其更改为 latin1

default_charset = "latin1"

通过更正这两个设置,浏览器会知道包含表单的页面编码是什么,表单甚至会向浏览器发出传递给服务器的数据的接受编码信号。

因此,这应确保PHP变量中的数据 latin1 编码。如果您正确配置了数据库客户端的编码,数据库服务器,两者之间连接的编码以及数据库中数据的编码,则可以将此数据传递到数据库中。

但是,正确设置表单是您需要做的第一步,然后才能确保mysql连接没有争吵。

答案 2 :(得分:0)

确保排序规则和MYSQL连接排序规则都是latin1_swedish_ci

答案 3 :(得分:0)

我认为您应该将页面的字符编码设置为:

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />

答案 4 :(得分:0)

对于那些希伯来语用户:

HTML PAGE:

<html lang="he">
  <head>
    <meta charset="utf-8">

PHP FORM

header('Content-Type: text/html; charset=UTF-8');
$con = mysqli_connect("HOST","DB_USER","PASSWORD","DB_NAME");
$con->set_charset('utf8');

DB,TABLE,FEILDs COLLATION

utf8_general_ci

答案 5 :(得分:-1)

您可以使用

mysql_query("set character_set_results='utf8'");

执行MySQL查询之前