2

我有一个mysql数据库备份。而这个备份排序规则是 utf8-general-ci。这是 vbulletin 的备份。

这是数据库中一篇文章中的一句话:

Ticaret Merkezi sizin ticaret yapmanýzý saðlayan müthiþ bir platformdur。Bu platformda internet ile baðý olmayan tüccarlar için ticaret yapma olanaðý saðlanmýþtýr。Bazý nedenlerden dolayý kendine 网站 kuramayan tüccarlar burada kendi ürünlerini tanýtabilecek ve yine burada bir çok tüccar ile sohbet edebilecek。

Bir çok satýcý ve müþteri arasýnda bað kuracak bu sistem sayesinde ticaret daha kolaylaþacak。

我的html代码是这样的

<html lang="tr"> 
<head> 
<meta charset="utf8"> 
</head> 
</html>

如果我不使用 lang='tr' 和 charset='utf-8'。我的数据变成了这个

Ticaret Merkezi sizin ticaret yapmanýzý saðlayan müthiþ bir platformdur。Bu platformda internet ile baðý olmayan tüccarlar için ticaret yapma olanaðý saðlanmýþtýr。Bazý nedenlerden dolayý kendine 站点 kuramayan tüccarlar burada kendi ürünlerini tanýtabilecek ve yine burada birçok tüccar ile sohbet edebilecek。

Bir çok satýcý ve müþteri arasýnda bað kuracak bu sistem sayesinde ticaret daha kolaylaþacak。

但是 lang='tr' 和 charset='utf-8' 并没有转换所有内容。

事实上,我对这个问题没有任何问题。但是这篇文章是这样保存到数据库中的。

如何转换这些字符?我不想使用 str_replace。

ý => ı, ð => ğ, þ => ş 等。

我的数据库连接部分

public function __construct() {
    $this->db_connection = mysql_connect($this->_server, $this->_dbuser, $this->_dbpassword) OR die ("Veritabanı Sunucusuna Bağlanılamadı!" . mysql_error() );
    mysql_query('SET NAMES utf8'); 
    mysql_query('SET CHARACTER_SET utf8'); 
    mysql_query("SET COLLATION_CONNECTION = 'utf-8'");

    mysql_select_db($this->_db) or die("Veritabanı Bulunamadı" . mysql_error() );
}
4

2 回答 2

1

我以前遇到过这样的问题。我认为首先您需要确保您用于查看从数据库中获取的文章的控制台或编辑器使用的是“utf-8”格式。我的意思是这个问题可能是由控制台引起的,而不是由数据库本身引起的。

于 2013-07-27T07:01:32.803 回答
0

由于我对“非英语”字符进行了很多工作,因此正确显示和存储这些字符需要几件事。

没有特别的顺序(因为我不知道什么字符集最适合波斯语,我将使用 UTF-8,如果它不同,你只需使用你需要的那个):

告诉您的浏览器您正在使用什么字符集,可以通过从 PHP 设置正确的标头header('Content-type: text/html; charset=utf-8');或在 html 中设置元标记,如下所示:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

在数据库中,避免在列/表中混合不同的排序规则和字符集。我总是将数据库、表和列设置为 utf8_general_ci,这可以满足我的需要(英语、德语、塞尔维亚语、匈牙利语等语言)。

正如 Jan 所说,请阅读http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html您很可能需要在连接到数据库后立即执行类似 SET NAMES utf8 的查询。

所有这些都应确保正确显示 unicode 字符。然而,还有一件事可以覆盖这一切——网络服务器。Apache(不知道其他服务器)有一个 AddDefaultCharset 指令。在大多数设置中,这被保留为关闭,但我确实遇到了默认字符集设置为 latin1 的设置,因此覆盖了我所有的字符集设置。如果已设置,则在 httpd.conf(或类似的配置文件)中设置。如果您可以访问它,我建议将其设置为关闭。如果您不这样做,那么您可以使用放置在您的 webroot 中的 .htaccess 覆盖全局值,例如:AddDefaultCharset utf-8

于 2013-07-27T06:59:31.870 回答