我正在尝试使用PHP从表单中将文本插入MySQL数据库
问题是,当我检查phpmyadmin中的DataBase时,我发现像ü,ö,ä,è,é,à等特殊字符被破坏了,我得到像üöäéèÃ
这样的东西。我试过了以下内容:
accept-charset="latin1_swedish_ci"
放入<form>
标记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
执行相同操作,并获得相同的结果。
这似乎忽略了我做的任何事情
建议和想法欢迎。谢谢你们,
肖恩
答案 0 :(得分:3)
不确定您是否尝试过此操作...但是在将希伯来语插入MySQL数据库时遇到了同样的问题。 我做了以下事情: 数据库表的排序规则为:utf8_unicode_ci
在PHP中我这样做:
@ $db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
$db->set_charset('utf8');
我创建了一个新连接,而不是将连接指定为UTF-8。
这在处理希伯来语时解决了我的问题...
答案 1 :(得分:3)
我无法正确地说这是否是导致问题的原因,但无论如何你都不能把charset和collation的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查询之前