【问题标题】:Website Display's ?'s instead of Korean网站显示的?而不是韩语
【发布时间】:2014-04-20 16:28:24
【问题描述】:

我将我的网站上传到新服务器。它在我家中的测试服务器上完美运行,数据库逐字复制没有不同的设置。但在该网站上,韩语中的任何内容都显示为??????。数据库正确存储它并且页面都有<meta charset="UTF-8">我无法弄清楚我错过了什么。

编辑:当我使用 phpMyADMIN 时,文本在数据库中显示正常

【问题讨论】:

标签: html mysql


【解决方案1】:

在 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 格式

【讨论】:

  • 原始发帖人说:“它在我家里的测试服务器上完美运行。”这意味着文件本身已正确保存。
  • 不需要任何反对票,我们只是想帮助您。不要那么激进。 [已编辑] 非常“在线出版商”保存没有 utf8 的文件(保存在“latin1”中)。不能确定他做错了什么。
  • 感谢您的帮助,但我认为这不是问题
  • 我总是将字符集设置为 UTF-8,这已成为习惯,因为我一直使用日语或韩语。顺便说一句,我没有对你投反对票,我从来没有在这个网站上对任何人投反对票
  • @chris3spice 如果您的 php 文件不在 utf8 中,数据将保存在“latin1”中,您必须将包含 (include('file_inc.php');) 的文件保存为 utf8-without-boom,我编辑我的答案。试试phpmyadmin,可能表是utf8,但是字段是latin1
【解决方案2】:

尝试将lang 属性添加到您的html 标记

<html lang="ko">

【讨论】:

  • 我可以,但您必须注册才能访问除 www.kumihangul.com 以外的任何显示韩语的页面
【解决方案3】:

问题很可能是您的家庭测试服务器和新远程服务器之间的数据库排序规则设置不同。这意味着虽然您的数据库被正确传输,但数据从数据库中吐出的方式完全是另一回事。

什么是数据库的数据整理给您带来了问题?默认情况下,大多数 MySQL 安装集 latin1_swedish_ci 而不是 utf8_general_ci 用于新创建的数据库。

更改数据库的排序规则并重试。

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;

或者您可以导出当前数据库,使用此命令创建一个新数据库并重新导入数据:

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

编辑: 原始发帖人声明连接和数据库都是 UTF8 干净的。但是尝试编辑 Apache 默认字符集怎么样。转到此处并像这样打开 Apache 的字符集文件:

sudo nano /etc/apache2/conf.d/charset

并取消注释如下所示的行:

#AddDefaultCharset UTF-8

所以它看起来像这样:

AddDefaultCharset UTF-8

然后重新启动 Apache。以我的拙见,这对于长期设置来说不是一个好主意,但如果不能解决问题,则表明您的代码库中有一些内容可以更改以影响相同的结果,而无需强制 Apache 强制使用 UTF8。

【讨论】:

  • 不幸的是,这并没有解决问题,我检查了每个单独的表并将我的设置与家庭测试服务器完全匹配,但它仍然无法正常工作
  • 你检查了my.cnf中的MySQL配置吗?然后您是否重新启动了 MySQL 服务器?另外,您的脚本语言是什么? php?如果是PHP,你的连接接口是什么?您可以像这样显式设置与 UTF8 的连接:mysqli_query($dbcon, "SET NAMES 'utf8'");
  • 是的,我确实更改了 my.cnf,实际上我重新启动了整个服务器。脚本在 PHP 中完成,一些页面使用 JQuery 在后台加载。我的界面是$conn = new PDO('mysql:host=localhost;dbname=kumiho;charset=utf8', $username, $password);
  • 不,仍然无法正常工作,通过 apache 设置,删除数据库并从头开始创建它,一些手动输入的测试数据仍然没有成功。奇怪的是,我使用了一个超级旧的数据库,我奇怪地转换了韩语......如果它在数据库中看起来像 ê³ ì–‘ì´,它将显示韩语
  • 也许吧,但是我在我的设置中找不到不同之处,我的本地环境是一个虚拟服务器,就像真实服务器一样运行,直到相同的操作系统。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 2017-11-24
  • 1970-01-01
相关资源
最近更新 更多