数据库不收集英语以外的内容[Charset / Unicode设置为UTF-8]

时间:2011-07-01 15:40:43

标签: html unicode character-encoding

我最近将我的服务器从dreamhost移到了Godaddy

当我使用Dreamhost时,我的访问者使用除英语之外的其他语言在我的网站上提交表单时没有问题。

例如,当他们提交我收到的表格时,他们会使用泰语。

但现在当他们提交任何表单时会发生什么我会收到像??????????这样的文本所以我虽然可能只是php.ini文件中的设置如果设置正确并且我看到它使用的是UTF -8

; PHP's built-in default is text/html
default_mimetype = "text/html"
default_charset = "UTF-8"

exif.encode_unicode = "UTF-8"
exif.decode_unicode_motorola = "UCS-2BE"
exif.decode_unicode_intel = "UCS-2LE"
;exif.encode_jis = 
exif.decode_jis_motorola = JIS
exif.decode_jis_intel = JIS

但我无法弄清楚为什么会在所有设置正确的情况下发生这种情况

我的每个html / php头文件都包含了

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

有什么建议我错过了吗?


提供更多信息

如果我使用Filezilla等FTP客户端,那么当我编辑文件.php或.html文件中的内容(如果它有除英语以外的任何其他语言)时,会出现另一个问题,就像问号{{ 1}}但如果我像Net2ftp那样从网上编辑它,那么它就没有问题了

2 个答案:

答案 0 :(得分:2)

我遇到类似PHP + MySQL的问题,MySQL拒绝正确存储UTF8字符串。解决方案是每次连接后告诉MySQL,使用UTF8。我相信这样做的SQL命令是SET CHARACTER SET UTF8SET NAMES UTF8,但我不确定,这是很久以前的事了。

编辑:找到我的一些旧的PHP代码,希望它有用:

function sql_connect(){

global $host,$user,$pass,$dbname,$conn;

//  connect to mysql
$conn=mysql_connect($host,$user,$pass);

//  if cannot connect, exit
if(!$conn){
    die('Cannot connect to MySQL server: '.mysql_errno().' - '.mysql_error());
};

//  if cannot set to utf8, exit
if(!mysql_query('set names utf8;',$conn)){
    mysql_close($conn);
    die('Cannot set to UTF8: '.mysql_errno().' - '.mysql_error());
};

//  if cannot select database, exit
if(!mysql_select_db($dbname,$conn)){
    mysql_close($conn);
    die('Cannot select database: '.mysql_errno().' - '.mysql_error());
};

};


function sql_to_html($x){
return(htmlspecialchars(stripslashes($x),ENT_QUOTES,"UTF-8"));
};

答案 1 :(得分:1)

不要忘记使用iconv_set_encoding将PHP的内部编码设置为UTF8。您的php.ini首选项仅影响随文档一起发送的HTTP标头!最后,请确保将编码传递给像htmlentities这样的修改函数。