我将我的网站上传到新服务器。它在我家的测试服务器上运行得很好,没有一个不同的设置,数据库是逐字逐句复制的。但在网站上,韩语中的任何内容都显示为??????
。数据库存储正确,页面都有<meta charset="UTF-8">
我无法弄清楚我错过了什么。
编辑:当我使用phpMyADMIN
时,文本在数据库中显示正常答案 0 :(得分:0)
问题很可能与您的家庭测试服务器和数据库之间的数据库整理设置不同。你的新远程服务器。这意味着在正确传输数据库时,数据从数据库中吐出的方式是另外一件事。
数据库的数据整理是什么让您遇到问题?默认情况下,对于新创建的数据库,大多数MySQL安装设置为latin1_swedish_ci
而不是utf8_general_ci
。
更改数据库的排序规则&amp;再试一次。
ALTER DATABASE [name of your database] CHARACTER SET utf8;
如果这是特定的表,则可以更改排序规则:
ALTER TABLE [name of your table] CONVERT TO CHARACTER SET utf8;
如果它是表格中的特定列:
ALTER TABLE [name of your table] MODIFY [name of your column] [other settings] CHARACTER SET utf8 COLLATE utf8_general_ci;
或许您可以导出当前数据库,使用此命令创建新数据库&amp;重新导入数据:
CREATE DATABASE [name of your database] CHARACTER SET utf8 COLLATE utf8_general_ci;
如果您想对计算机上的MySQL安装进行永久性更改,请转到并编辑my.cnf
。以下将整个链设置为UTF-8:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
编辑:原始海报说明连接&amp; DB都是UTF8干净的。但是尝试编辑Apache默认字符集呢。去这里&amp;像这样打开Apache的字符集文件:
sudo nano /etc/apache2/conf.d/charset
取消注释看起来像这样的行:
#AddDefaultCharset UTF-8
所以它看起来像这样:
AddDefaultCharset UTF-8
重启Apache。对于长期设置而言,这不是一个好主意,但是如果解决了这个问题,它表明你的代码库中有一些东西可以被改变以影响相同的结果而不必强迫Apache强制使用UTF8。
答案 1 :(得分:0)
在PDO(php api)中,您需要设置charset $conn->exec('SET CHARACTER SET utf8');
。
PHP示例:
<?php
//한국어/조선말
header('Content-Type: text/html; charset=utf8');
$username = 'user';
$password = 'password';
$host = 'domain';
$db = 'dbtest';
try {
$conn = new PDO('mysql:host=' . $host . ';dbname=' . $db . ';charset=utf-8', $username, $password);
$conn->exec('SET CHARACTER SET utf8');//This solve the problem
$stmte = $conn->prepare('SELECT id, text FROM test LIMIT 10');
$exec = $stmte->execute();
if ($exec) {
while($reg = $stmte->fetch(PDO::FETCH_OBJ)){
echo 'id: ' . $reg->id . '<br />';
echo 'text: ' . $reg->text . '<br /><hr />';
}
} else {
echo 'Error SELECT';
}
} catch(PDOException $e){
echo 'PDOException: ', $e->getMessage();
}
?>
Mysql示例:
CREATE DATABASE `dbtest` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `dbtest`;
CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`text` varchar(300) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test` (`id`, `text`) VALUES (1, '한국어/조선말');
在服务器中使用phpmyadmin验证服务器上的DATABASE是否为&#34; utf8&#34;,请参阅:
在您的数据库中必须是其他内容。
如果您的数据库是正确的(在使用utf8检查后),则问题出在某个PHP文件中。
要解决此问题,您应该保存所有php文件(主要文件和包含文件)
使用notepad++将您的html文件(或php文件)保存在&#34; utf8中没有繁荣&#34;,请参阅:
添加PHP文件(在顶级文件中):
<?php
header('Content-Type: text/html; charset=utf8');
?>
包含的文件也应保存在 utf8-without-boom 中,例如:
<?php
include('YOUR FILE INCLUDED.php');// Save "YOUR FILE INCLUDED.php" in UTF8-without-boom
?>
也许它的某些页面是ANSI(例如&#34; form.php&#34;)。
秒>
注意:所有PHP文件必须采用UTF8-without-boom格式
答案 2 :(得分:0)
尝试将lang
属性添加到您的html
代码
<html lang="ko">