【发布时间】:2011-09-08 03:13:01
【问题描述】:
$dblocation = "localhost";
$dbname = "xx";
$dbuser = "xx";
$dbpasswd = "xx";
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
mysql_select_db($dbname, $dbcnx);
mysql_query("SET NAMES utf8");
mysql_query("SET COLLATION_CONNECTION=utf8_bin");
$name = mysql_real_escape_string($name);
$about = mysql_real_escape_string($about);
mysql_query("INSERT INTO votes
(name, about, active) VALUES('".$name."', '".$about."', 1 ) ")
or die(mysql_error());
当 $name 和 $about 不是西里尔字母时,它可以正常工作。但是当它是西里尔文时 - 脚本只需添加一行空白名称和关于字段。做什么?
DB 是 UTF-8,使用带有西里尔符号的 phpMyAdmin 手动添加行效果很好,PHP 脚本是 UTF-8,一切都是 UTF-8。
【问题讨论】:
-
试试 mysqli_set_charset($dbcnx, 'utf8'); $dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd); (或 mysql_set_charset 如果你有旧的 PHP 版本)
-
向我们展示
SHOW CREATE TABLE votes命令的结果。 -
@Johan,错了,
SET NAMES utf8这只是他需要的。 -
$name来自哪里?如果来自网页,那么您应该检查带有表单的页面的Content-type是否设置为text/html;charset=UTF-8之类的东西(可以在HTTP 标头或元标记中更改)。看看this question 在 PHP 中设置编码。
标签: php mysql character-encoding collation