将特殊字符从数据库转换为普通字符

时间:2013-07-27 06:54:17

标签: php mysql utf-8 backup special-characters

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

以下是数据库中文章的一句话:

  

Ticaret Merkezi sizinticaretyapmanýzýsalaylayanmüthiþbir   platformdur。 Bu platformda internetilebaðýolmayantüccarlariçin   ticaretyapmaolanaðýsaðlanmýþtýr。 Bazýnedenlerdendolayýkendine   网站kuramayantüccarlarburadakendiürünlerinitanýtabilecekveyine   buradabirçoktéccariesohbet edebilecek。

     

Birçoksatýcývemüþteriirasýndabaðkuracakbu sistem sayesinde   ticaretdahakolaylaþacak。

我的HTML代码就是那样

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

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

  

Ticaret Merkezi sizinticaretyapmanýzýsaðlayanmüthiþbir   platformdur。 Bu platformda internetilebaðýalmayantÃccarlar   içinticaretyapmaolanaðÃ,saðlanmýþtýr。 Bazýnedenlerden   dolayýkendinesite kuramayantüccarlarburadakendiürünlerini   tanýtabilecekve yine buradabirçoktÃccillesohbet edebilecek。

     

Birçoksatýcývemüþteriirasýndabaðkuracak bu sistem   sayesinde ticaretdahakolaylaþacak。

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

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

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

  

ý=&gt; ı,ð=&gt; ğ,þ=&gt; ş等。

我的数据库连接部分

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() );
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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字符。但是,还有一件事可以覆盖所有这些 - Web服务器。 Apache(不了解其他服务器)有一个AddDefaultCharset指令。在大多数设置中,这保留为Off,但我确实遇到了默认字符集设置为latin1的设置,从而覆盖了我的所有字符集设置。如果设置了此项,则会在httpd.conf(或类似的配置文件)中设置。如果您有权访问它,我建议将其设置为关闭。如果不这样做,则可以使用webroot中的.htaccess覆盖全局值,例如:AddDefaultCharset utf-8