2

日本語の文字を表示するページを作ろうとしています。これらの日本語の文字は私のデータベースに保存されています。私は調査を行い、与えられた提案の多くを試しましたが、私の日本語の文字はまだ疑問符として返されます. 現在、これは私のコードがどのように見えるかです:

<?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] を日本語の文字列に置き換えれば機能します。ここで何か不足していますか?手動で入力した文字列ではエンコードが機能するのに、データベースから取得した文字列では機能しない理由がわかりません。

4

1 に答える 1

2

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

マニュアルが言うように:

SET NAMES は、クライアントが SQL ステートメントをサーバーに送信するために使用する文字セットを示します...また、サーバーがクライアントに結果を返すために使用する文字セットも指定します。

その後、使用する必要はありませんmb_convert_encoding

于 2013-05-20T08:51:26.383 に答える