База данных не собирает контент, кроме английского [Charset / Unicode установлен на UTF-8] - PullRequest
0 голосов
/ 01 июля 2011

Я недавно переместил свой сервер с 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" /> 

Любое предложение, что я пропустил?


Чтобы добавить больше информации,

Если я использую FTP-клиент, такой как Filezilla, возникнет еще одна проблема: при редактировании файла .php или .html содержимое файла, если он имеет какой-либо другой язык, кроме английского, будет отображаться как вопросительный знак ??????? но если я отредактирую его из Интернета, например, Net2ftp, у него не возникнет проблем с этим

Ответы [ 2 ]

2 голосов
/ 01 июля 2011

У меня была похожая проблема с PHP + MySQL, MySQL отказался правильно хранить строки UTF8.Решением было сообщать MySQL каждый раз после подключения использовать UTF8.Я считаю, что команда SQL для этого была SET CHARACTER SET UTF8 или SET 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 голос
/ 01 июля 2011

Не забудьте установить внутреннюю кодировку PHP в UTF8, используя iconv_set_encoding .Ваши настройки php.ini влияют только на заголовки HTTP, которые отправляются вместе с вашим документом!Наконец, убедитесь, что вы передаете кодировку искажающим функциям, таким как htmlentities.

...