umlauts(ä,ö,ü)在jquery json autocomplet中给出错误“403 Forbidden”

时间:2015-11-21 14:00:02

标签: javascript php jquery html utf-8

我阅读了有关该问题的几个信息,并在过去两天内尝试找到该错误,但不幸的是我无法做到,所以我希望你能看到它。

问题如下:我有一个搜索字段,我输入任何字符并获得自动完成下拉列表。当我没有使用任何特殊字符时,它没有问题。下拉列表正确显示了变形金刚,但当​​我输入“ü”或“ß”或类似内容时,Google Chrome浏览器的开发框显示:

“... search.php?term =%C3%BC 403(Forbidden)”

在我进入变音符号后,当我查看Chrome的“网络”部分时,我看到:
连接:保持活动
内容编码:gzip
内容类型:text / html的;字符集= ISO-8859-1


但是当我键入一个普通字符时,我看到:
连接:保持活动
内容编码:gzip
内容类型:text / html的;字符集= UTF-8

不更改任何源代码。这很奇怪。

以下是我正在使用的代码:

HTML / JS:

<link rel="stylesheet" type="text/css" href="jquery.autocomplete.css">

 <script type="text/javascript"> 
$(function() {

$("#cityzip").autocomplete({
    source: "http://XXXXXXX/search.php"  ,
    select : function(event, ui) {
        event.preventDefault();
        var value = ui.item.value;
        var sp_value = value.split(' / ');
        var radius = sp_value[0];
        var zip = sp_value[1];
        $('#cityzip').val(ui.item.label);
        $('#addradius').val(radius);
        $('#zip').val(zip);
    },
    focus: function(event, ui) {
        event.preventDefault();
    }
  });
});

search.php

header("Content-Type:text/html; charset=utf-8");

/*
* database
*/
include 'data.php';  

/*
 * Results array
 */
$results = array();


/*
 * Autocomplete formatter
 */
function autocomplete_format($results) {
    foreach ($results as $result) {
    echo $result[0] . '|' . $result[1] . "\n";
}
}

/*
 * Search for term if it is given
 */

if (isset($_GET['term'])) {
$q = mb_strtolower(($_GET['term']),'UTF-8');
if ($q) {

    foreach ($data as $key => $value) {
        if (strpos(mb_strtolower(($key),'UTF-8'), $q) === 0) {              
            $results[] = array("label" => $key, "value" => $value);
            if(++$i > 6) break;
        }
    }
}
}

/*
 * Output format
 */
$output = 'autocomplete';  
if (isset($_GET['output'])) {
$output = mb_strtolower($_GET['output'],'UTF-8');
}

/*
* Output results
*/
echo json_encode($results);

if (isset($_GET['c'])) {
    echo $data[$_GET['c']];;

}

和数据库data.php

<?php

header("Content-Type:text/html; charset=utf-8");

$data = array(
"Berlin" => "29,4 / 10179",
"Berlin Adlershof" => "2,1 / 12489",
"Berlin Alt - Treptow" => "1,5 / 12435",
"Berlin Altglienicke" => "2,5 / 12524",
"Berlin Französisch - Buchholz" => "3,8 / 12205",
);
?>

我真的很感激任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

您可能需要在搜索字词发送之前对其进行编码,否则不会允许特殊字符通过。

$encodedTerm = urlencode($_GET['term']);
相关问题