我阅读了有关该问题的几个信息,并在过去两天内尝试找到该错误,但不幸的是我无法做到,所以我希望你能看到它。
问题如下:我有一个搜索字段,我输入任何字符并获得自动完成下拉列表。当我没有使用任何特殊字符时,它没有问题。下拉列表正确显示了变形金刚,但当我输入“ü”或“ß”或类似内容时,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",
);
?>
我真的很感激任何帮助。谢谢。
答案 0 :(得分:0)
您可能需要在搜索字词发送之前对其进行编码,否则不会允许特殊字符通过。
$encodedTerm = urlencode($_GET['term']);