0

別の言語 (トルコ語) を表示しようとしていますが、データベースから HTML で表示されている間は表示できませんが、トルコ語の文字をエコーすると表示できません ç ı ö ş ü § ❢ ₳ のように表示されます₢ PHP で。iOSで使用しているため、ファイルはPHPにとどまる必要があります。それで、私の問題はどこにあるでしょうか?

<?php
$connection = mysql_connect($host, $user, $pass);

$queryA = '';
$decision = $_GET['x'];
$ilParam = $_GET['y'];


$ilSecim = 0;
$ilceSecim = 1;


//Check to see if we can connect to the server
if(!$connection)
{
    die("Database server connection failed.");  
}
else
{

//Attempt to select the database
        $dbconnect = mysql_select_db($db, $connection);

        //Check to see if we could select the database
        if(!$dbconnect)
        {
            die("Unable to connect to the specified database!");
        }
        else
        {          
      if($decision == $ilSecim)
        $queryA = "SELECT distinct city FROM places";

            $resultset = mysql_query($queryA, $connection);

            $records = array();

            //Loop through all our records and add them to our array
            while($r = mysql_fetch_assoc($resultset))
            {
                $records[] = $r;
            }

            //Output the data as JSON
            echo utf8_decode(json_encode($records));
        }
 }
?>
4

2 に答える 2

0

通常、データベースのデータをプルする場合、特殊文字が適切に残るかどうかは、文字エンコーディングに依存します。

文字エンコーディングとは

文字エンコーディングを、すべての文字が数値表現を持つ大きなテーブルとして想像してみてください。たとえば、次のようなものです。

A = 1
B = 2
C = 3
..et cetera..

さまざまな文化やニーズに基づいて、さまざまなエンコーディング テーブルがたくさんあります。1 つは US-ASCII、もう 1 つは utf8 または utf8_czech、または utf16 であり、それぞれが異なる文字に異なる数値を与えます (通常は 16 進数などの異なる数値システムで)。 .)

説明

そして、あるタイプのエンコーディングでエンコードされたテキストがデータベースのテーブルに格納されているとします。テーブル/列の文字エンコーディングがわからないデータベース接続を作成します。使用する文字エンコーディングが指定されていないため、デフォルトの文字エンコーディングが使用されます。

ここで、クエリを使用してテーブルからデータを引き出して読み取りますが、データベース接続は適切なエンコーディングを認識しないため、使用するものに近いデフォルトのものを使用しますが、十分に近いものではありません。

データベースから文字コードを読み取るとき、デフォルトの文字エンコーディングに従ってそれらを読み取り、異なる意味を与えるためです- ç から § などになります...

解決

基本的に、データベース接続の文字エンコーディングを指定する必要があります。mysql_set_charsetこれは、関数を追加することによって行われます。

mysql_set_charset("charset_name_you_want_to_use",$database_connection_name);

あなたの場合:

mysql_set_charset("charset_name",$connection);

データベースで使用されている文字セットの名前を"charset_name"、できればデータベースを選択した後に、コード内のどこかに置くだけです。

また、PHP の一部を使用していることも知っておく必要があります。これはおそらくまもなく廃止される予定であり、バージョン 5.0 よりも高いバージョンの PHP サーバーで作業している場合は、mysqliなどのmysql関数の他の代替手段を使用する必要があります(どちらも機能します)。 mysql データベースでは、mysqli は単に新しく推奨される方法です)。

PS: できる限り正確にしようとしましたが、基本的な経験はあるものの、PHP は私のものではありません。:)

于 2013-10-16T12:06:41.997 に答える