2

私の現在のプロジェクトでは、MySQL にある辞書データベースのブラウザーを作成したいと考えています。これらの単語には特殊文字が含まれており、UTF-8 エンコーディングを使用しています。これまでのところ、ユーザーの入力を調べて関連情報を出力する、機能する「検索」を作成しました。

ここで私は問題に遭遇します。ユーザーが通常の文字をすべて入力すると、コードは正しく機能します。ただし、特殊文字を含むものを入力すると、クエリは常に null を返します。

関連するコードは次のとおりです。

HTML ページ:

<html>
    <body>
        <form action="test.php" method="get">
            Search dictionary: <input type="text" name="search">
            <input type="submit" value="Submit">
        </form>
    <br>
    </body>
</html>

PHP スクリプト (抜粋):

<?php
    $q=$_GET['search'];
    $id = "";
    if (strlen($q) > 0) {
        // connects to DB
        $db = new PDO('mysql:host=localhost;dbname=***', '***', '***');
        $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

        $query="SELECT DISTINCT e.lexeme_id, l.posc
        FROM entry e
        INNER JOIN lexeme l 
        USING (lexeme_id)
        WHERE e.lemma = '".$q."'";

        $stmt=$db->prepare($query);
        $stmt->execute();

        foreach ($stmt as $row) {
            $id = $row['lexeme_id'];
            $posc = $row['posc'];
            //output results here
            echo "<h1>".$q."</h1><br/>";
            echo "<h2>".$posc."</h2><br/>";
        }
    }
?>

検索ボックスに「man」と入力すると、適切なデータが表示されます。ただし、「maðr」を検索しても結果は得られません。ただし、MySQL Workbench で同じクエリを実行すると、正しい出力が得られます。使用するクエリをスクリプトに出力させましたが、本来あるべきものと一致しています。

TL;DR: 次のクエリは、MySQL Workbench でファイルを実行しますが、PHP スクリプトを介して HTML ページで呼び出すと実行されません。

SELECT DISTINCT e.lemma
FROM entry e
INNER JOIN lexeme l 
USING (lexeme_id)
WHERE e.lexeme_id = "maðr"

何がうまくいかないのでしょうか?ありがとう!

4

1 に答える 1

0
header('Content-type: text/plain; charset=utf-8');

PHPスクリプトでUTF8にする

于 2013-07-04T04:31:53.790 に答える