在 PDO (php api) 中,你需要设置字符集$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 是否为“utf8”,请参见:
在你的数据库中一定有别的东西。
如果您的数据库是正确的(使用 utf8 检查后),那么问题出在某个 PHP 文件中。
要解决,您应该保存所有 php 文件(主要和包含)
使用notepad++将您的html文件(或php文件)保存在“utf8 without boom”中,参见:
添加您的 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 格式的(例如“form.php”)。
注意:所有 PHP 文件必须是 UTF8-without-boom 格式