1

我无法让我的 PHP 5.3 代码准确地返回我在 MySQL (5.5) 数据库中的内容。

我正在使用 jquery-ui-autocomplete(1.9.2,但它也使用 1.8.x)来检索城市名称。例如,一个城市是“Heßheim”,但 PHP 正在返回“He ßheim”。数据库/表排序规则是 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 返回任何东西。

测试脚本返回此网页 - ["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 回答