1

MySQL (5.5) DB にあるものとまったく同じものを PHP 5.3 コードで返すことができません。

都市名を取得するために jquery-ui-autocomplete (1.9.2 ですが、1.8.x でも同様でした) を使用しています。たとえば、ある都市は「ヘスハイム」ですが、PHP は「ヘハイム」を返しßます。データベース/テーブルの照合順序は Latin1_general_ci でしたが、utf8_general_ci に変更しても効果がありませんでした。私のPHPコード:

$term = trim(strip_tags($_GET['term']));
//retrieve the search term that autocomplete sends

if (!is_numeric($term)) {
    $qstring = "SELECT DISTINCT city FROM table WHERE city LIKE '" . $term . "%' ORDER BY city ASC";
    $result = mysql_query($qstring);
    //query the database for entries containing the term

    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { //loop through the retrieved values
        //$row['id'] = (int)$row['id'];
        $row['city'] = htmlentities(strip_tags($row['city']));
        $row_set[] = htmlspecialchars_decode($row['city']);
        //build an array
    }
}

header('Content-Type: text/html; charset=utf-8');
echo json_encode($row_set);

HTMLエンティティをデコードするために考えられるすべてのことを試しましたが、上記でもそれはできません。また、$row['city'] = htmlentities(strip_tags($row['city']));そこにある必要があります。そうしないと、Heßheim に対して何も返されません。

スクリプトをテストすると、この Web ページ ["Heddesheim","Heidelberg","Heßheim"] が返され、ページのソースは ["Heddesheim","Heidelberg","He ßheim"] のようになります。もちろん、jquery-ui-autocomplete はそれを He ßheim としてリストしています。

4

1 に答える 1

0

html_entity_decode()の代わりに使用する必要がありhtmlspecialchars_decodeます。PHPMAN

また、エンコードしたばかりなのに、なぜデコードするのですか? ブラウザはページのレンダリング中にエンティティをデコードするので、必要なのは

$row['city'] = htmlentities(strip_tags($row['city']));  
$row_set[] = $row['city'];
于 2013-01-01T20:05:32.800 に答える