在PHP页面上显示MySql数据库中的日文字符

时间:2013-05-20 07:21:25

标签: 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]替换为日语字符串,它确实有用。我在这里错过了什么吗?我不确定为什么编码对我手动输入的字符串起作用,但不是我从数据库中得到的字符串。

1 个答案:

答案 0 :(得分:1)

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

$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