php和mysql数据库土耳其语字符

时间:2014-04-24 09:02:54

标签: php mysql

朋友您好我知道这个问题已经在stackoverflow中但是我搜索所有问题的答案但不是我的搜索。我的问题是mysql和php土耳其字符问题。

我正在使用此<meta>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

但土耳其人看起来像这样:üÅüdü

我尝试像这样的数据库连接:

<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', 'root');
define('DB_DATABASE', 'test');
mysql_query("SET NAMES UTF8");
$connection = mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD) or die(mysql_error());
$database = mysql_select_db(DB_DATABASE) or die(mysql_error());
?>

但土耳其人性格问题仍在继续。

我的phpmyadmin 3表总和整理: utf8_general_ci

消息表排序规则: latin1_swedish_ci

<?php
$Wall = new Wall_Updates();
if(isSet($_POST['update']))
{
$update=mysql_real_escape_string($_POST['update']);
$data=$Wall->Insert_Update($id,$update);

if($data)
{
$msg_id=$data['msg_id'];
$message=tolink(htmlentities($data['message']));
$time=$data['created'];
$id=$data['uid_fk'];
$name=$data['name'];
$face=$Wall->Gravatar($id);
//$commentsarray=$Wall->Comments($msg_id);
?>

以这种方式截屏链接click 我怎样才能解决土耳其人的问题。

$.ajax({
type: "POST",
url: "comment_ajax.php",
data: dataString,
cache: false,
success: function(html){
$("#commentload"+ID).append(html);
$("#ctextarea"+ID).val('');
$("#ctextarea"+ID).focus();
 }
 });
}
return false;
});

6 个答案:

答案 0 :(得分:2)

你能试试吗

  mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);
  @mysql_select_db(DB_DATABASE) or die( "Unable to select database");
  mysql_set_charset('utf8');

和我一起为希腊工作

答案 1 :(得分:1)

HTML实体:

根据您的screenshot判断,数据库包含HTML编码实体,这意味着在将数据保存到数据库之前的某个时候,您正在通过对其应用htmlentities来修改数据。

不幸的是,如果您的PHP版本为< 5.4,则可选参数$encoding不会默认为UTF-8,因此它会将您的字符串视为ASCII。

多字节与单字节:

由于这个多字节字符在保存之前被分成单字节字符和HTML编码。

从数据库中检索数据时,HTML源代码将包含HTML实体(例如&Atilde;),但您的浏览器将以您看到它们的方式呈现它们。

不使用htmlentities应该解决您的问题,建议您在输出数据之前尝试使用html_entity_decode(不确定它是否会造成比修复更多的麻烦)。

如何检查HTML实体:

查看网站的HTML源代码,并检查从DB中提取的文本中是否有任何实体(例如:&Atilde;)。

答案 2 :(得分:1)

更改此内容:

<?php
$Wall = new Wall_Updates();
if(isSet($_POST['update']))
{
$update=mysql_real_escape_string($_POST['update']);
$data=$Wall->Insert_Update($id,$update);

if($data)
{
....
?>

到此:

<?php
$Wall = new Wall_Updates();
if(isSet($_POST['update']))
{
$update=html_entity_decode(mysql_real_escape_string($_POST['update']));
$data=$Wall->Insert_Update($id,$update);

if($data) 
{
....
?>

答案 3 :(得分:0)

最好将表的编码更改为utf8并连接到mysql,如下所示:

$connection = mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD) or die(mysql_error());
$database = mysql_select_db(DB_DATABASE) or die(mysql_error());
mysql_query('set names "utf8" collate "utf8_turkish_ci" ');

答案 4 :(得分:0)

将此行放在$ database变量行下面并尝试

mysql_set_charset('utf8',$database);

在插入此类数据时,您必须在查询N

中使用N('$yourvalue')和您的值

答案 5 :(得分:0)

我有同样的问题并且像那样解决了

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "tamirat";

$co = mysqli_connect($servername, $username, $password, $dbname) or die("Connection failed: " . mysqli_connect_error());
mysqli_set_charset($co, 'utf8');

首先编写连接内容并编写&#39; utf8&#39;。我希望这会有所帮助。