0

問題

SELECTPHP でクエリを使用して MySQL データベースでアラビア語の単語を検索すると、0 の結果が得られます。

ただし、まったく同じクエリでも、別のクライアント、つまり SQLBuddy などの結果が得られます。すべてUTF-8でエンコードされています。

コード

<?php
    $host = "localhost";
    $username = "hans_wehr_client";
    // i know my security is a joke :)
    $password = "hans_wehr"; 
    $database = "hans_wehr";
    $conn = new mysqli($host, $username, $password, $database);
    if ($conn == TRUE){
        $search = $_GET["search"];
        $encoded_search = utf8_encode($search);
        echo $encoded_search."<br>";
        header('Content-Type: text/html; charset=utf-8');
        $sql = "SELECT * FROM dictionary WHERE ARABIC LIKE '$search'";
        echo $sql."<br>";
        mysqli_query($conn,"SET NAMES 'utf8'");
        mysqli_query($conn,'SET CHARACTER SET utf8');
        $result = mysqli_query($conn, $sql);
        if (mysqli_num_rows($result) > 0) {
        // output data of each row
            while($row = mysqli_fetch_assoc($result)) {
                header('Content-Type: text/html; charset=utf-8');
                echo $row["ARABIC"]. " - Meaning: " . $row["ENGLISH1"]. " " . $row["ENGLISH2"]. "<br>";
            }
        }else {
            echo "0 results";
        }
    }

?>

モッドがピッチフォークを取得する前に、トラブルシューティング ロジックをクリアする必要があります。

  1. エンコーディング。ページ エンコーディングをutf-8usingに設定header('Content-Type: text/html; charset=utf-8');し、クエリmysqli_query($conn,"SET NAMES 'utf8'");andmysqli_query($conn,'SET CHARACTER SET utf8');を実行しました。これにより 、アラビア語の代わりに???????andがレンダリングされるという問題が解決されました。Ùؤتاそれは一種の別の問題です。ソース。ソース 2。
  2. データベース文字セット。データベースと列が UTF-8 に設定されています。

  3. 他のクライアントは動作します。SQLBuddy/MySQL ネイティブ クライアント/PHPMyAdmin は、まったく同じクエリを実行すると結果が得られるため、機能しているように見えます。したがって、私は彼と同じ血まみれの船に乗っているようです。クエリSELECT * FROM dictionary WHERE ARABIC LIKE 'آخَر، أُخرى'は、SQLbuddy では結果を返しますが、PHP では nada を返します。

考えられる解決策:

クエリを実行SELECT * FROM dictionary WHERE ARABIC LIKE 'آخَر، أُخرى'すると、結果が得られます。

ただし、 UTF-8でエンコードされたバージョンのアラビア語でクエリを実行すると、 0 の結果が返されます。SELECT * FROM dictionary WHERE ARABIC LIKE '&#1570;&#1582;&#1614;&#1585;&#1548; &#1571;&#1615;&#1582;&#1585;&#1609;'これはPHPをシミュレートしていると思います。

UTF-8アラビア語バージョンは、自動的に URL エンコードされた $[_GET] パラメータをデコードすることによって取得されます。%26%231570%3B%26%231582%3B%26%231614%3B%26%231585%3B%26%231548%3B+%26%231571%3B%26%231615%3B%26%231582%3B%26%231585%3B%26%231609%3B

MySQLi がUTF-8 version実際のアラビア語の代わりにクエリを実行している可能性はありますか? したがって、それらは異なるため、一致が見つかりませんか?

もしそうなら、検索語をURLエンコードしないように明示的にPHPに指示して、そのまま渡すにはどうすればよいですか?

私のアルミ箔理論によれば、http://localhost/hans_wehr/search_ar.php?search=آخَر، أُخرىうまくいくでしょうが、http://localhost/hans_wehr/search_ar.php?search=%26%231570%3B%26%231582%3B%26%231614%3B%26%231585%3B%26%231548%3B+%26%231571%3B%26%231615%3B%26%231582%3B%26%231585%3B%26%231609%3B

ご意見をお待ちしております。

4

1 に答える 1