2013-05-20 85 views
2

我正在试着制作一个显示日文字符的页面。这些日文字符存储在我的数据库中。我已经完成了我的研究并尝试了很多建议,但是我的日语角色仍然作为问号返回。目前,这是我的代码的外观:在PHP页面上显示来自MySql数据库的日文字符

<?php 


$con=mysqli_connect("host", "user", "pw", "db"); 
if (!$con) 
{ 
    die('Failed to connect to mySQL: ' .mysqli_connect_errno()); 
} 
} 
?> 

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head> 

<body> 
<?php 
    mb_internal_encoding('UTF-8'); ?> 
    <center> 
     <div id="fb-root"></div> 
     <form method="POST" id="myForm"> 
      <h1> 
       <?php 
       $title = mysqli_query($con, "SELECT `title` FROM titles WHERE c1='a' or c2 ='b'") or die("ERROR: ". mysqli_error($con)); 
       $title_str = mysqli_fetch_array($title); 

       $mystr = mb_convert_encoding($title_str[0], "UTF-8"); 
       echo "test: ".$mystr; 
         ?> 
     </h1><br/> 
    </form> 
</body> 

如果我的字符编码的作品,如果我更换$ title_str [0]日本串它的工作我已经检查。我在这里错过了什么吗?我不知道为什么编码在字符串手动输入,但不是我从数据库中获得的字符串。

+0

你确定数据库中字符串的字段能够保存UTF8吗? – AStupidNoob

+0

是的。我的数据库中的所有字符串都是日语字符 – user1597438

+0

'如果未指定from_encoding,则将使用mb_convert_encoding上PHP.org的内部编码。我想这可能是你想要的,但请尝试完全按照在数据库中指定它(选择其中的一个并在mb_convert_encoding http://www.php.net/manual/en/mbstring.supported的最终可选参数中查找它-encodings.php)。我猜测是从mb_convert_encoding无法将输入分辨率转换为UTF-8 – AStupidNoob

回答

1

尝试使用SET NAMES UTF8连接到MySQL后:

$con=mysqli_connect("host", "user", "pw", "db"); 
if (!$con) 
{ 
    die('Failed to connect to mySQL: ' .mysqli_connect_errno()); 
} 

mysqli_query($con, "SET NAMES 'UTF8'") or die("ERROR: ". mysqli_error($con)); 

正如manual说:

SET NAMES表示的字符集客户端将用来发送SQL 语句到服务器...它还指定服务器应该使用 将字符集发送回客户端的字符集。

之后,没有必要使用mb_convert_encoding

+0

真棒。这很好。我确实改变了你的答案。我为UTF8添加了单引号,并将其大写,因为如果没有单引号或小写字母,它就不起作用。非常感谢。 – user1597438

+0

@ user1597438太好了。编辑已批准。 – user4035

相关问题