Wystąpiły pewne problemy z wyświetlaniem danych w autouzupełnianiu jquery ui, gdy wyświetlaję tekst, nie jest on zakodowany w utf-8, mimo że moja db i strona używają utf-8.
Również, gdy próbuję wyświetlić go w inny sposób, wyświetla się normalnie z odpowiednim kodowaniem.
Skrypt ui jquery.
<script type="text/javascript" charset="utf-8">
$(function() {
function log( message ) {
$( "<div>" ).text( message ).prependTo( "#log" );
$( "#log" ).scrollTop( 0 );
}
$( "#items" ).autocomplete({
source: "getSurgestedItems.php",
minLength: 2,
select: function( event, ui ) {
log( ui.item ?
"Selected: " + ui.item.value + " aka " + ui.item.id :
"Nothing selected, input was " + this.value );
}
}).data("autocomplete")._renderItem = function(ul, item){
return $("<li>")
.data("item.autocomplete", item)
.append("<a>" + item.value + "<br>" + item.desc + "</a>")
.appendTo(ul);
};
});
</script>
Skrypt php pobierający elementy.
while ($row = $result->fetch_assoc()) {
$i++;
if(!$first){
$json .=",";
}
else{
$first = false;
}
$name = addslashes($row["name"]);
$desc = mb_substr(addslashes($row["description"]), 0, 60, "utf-8");
$desc .= "...";
$json .="{"value" : "".$name."",
"desc" : "".$desc.""}";
}
$json .="]";
echo $json;
Teraz, tak jak powiedziałem, próbowałem wyświetlać dane, w każdy możliwy sposób i tylko z funkcją autouzupełniania jest wyświetlany nieprawidłowo.
Odpowiedzi:
0 dla odpowiedzi № 1Komentarz SaschaM78 sprawił, że spojrzałem we właściwym kierunku, patrząc na json_encode, odkryłem, że działa tylko z utf-8, co skłoniło mnie do próby zakodowania każdego łańcucha do utf-8, używając mb_convert_encoding, które rozwiązały mój problem, teraz działa dobrze.
Nowy kod php.
$json = array();
while ($row = $result->fetch_assoc()) {
$name = mb_convert_encoding($row["name"], "utf-8");
$desc = mb_convert_encoding(substr($row["description"], 0, 60), "utf-8");
$desc .= "...";
$json[] = array("value" => $name, "desc" => $desc);
}
echo json_encode($json);