Hei, olen väsäillyt ajax hakua joka siis hakee reaaliaikaisesti dataa mysql:ästä, olen onnistuneesti saanut koodin hakemaan ääkköset mysql:ästä, mutta jos laitan haku lomakkeeseen jonkun ääkkösen se ei löydä yhtään tulosta. Haun teen käyttäen jqueryä apuna.
Uskon että tätä on kysytty ennenkin mutta en löytänyt haulla heti mitään tähän viittaavaa.
Ja sanokaa jos tarvitsette koodia.
Luultavasti tiedon hakevassa koodissa on virhe. Koodia voisit laittaa, nyt on vähän paha sanoa mitään.
function lookup(inputString) { if(inputString.length == 0) { // Hide the suggestion box. $('#suggestion').show(); $('#suggestions').hide(); } else { $.post("js/kuntot.php", {queryString: escape(""+inputString+"")}, function(data){ if(data.length >0) { $('#suggestion').hide(); $('#suggestions').show(); $('#autoSuggestionsList').html(data); } }); } }
<input type="text" size="30" name = "inputString" value="<?php echo $string;?>" id="inputString" onkeyup="lookup(this.value);" /> <div class="suggestionsBox" id="suggestions" style="display: none;"> <div class="suggestionList" id="autoSuggestionsList"> </div> </div>
<?php header('Content-type: text/plain; charset=ISO-8859-1'); $db = new mysqli('localhost', 'blö' ,'blö', 'www'); if(!$db) { echo 'Ei tietokanta yhteyttä'; } else { if(isset($_POST['queryString'])) { $queryString = $db->real_escape_string($_POST['queryString']); if(strlen($queryString) >0) { $query = $db->query("SELECT otsikko FROM kuntot WHERE otsikko LIKE '%$queryString%' LIMIT 20"); if($query) { while ($result = $query ->fetch_object()) { echo '<div>'.$result->otsikko.'</div>'; } } else { } } else { } } else { echo 'Back off!'; } } ?>
AJAX-pyynnössä ääkköset kulkevat UTF-8-enkoodattuina. Kaikkein järkevin vaihtoehto olisi muuttaa sivut kokonaan UTF-8-enkoodaukseen, mutta jos tämä ei jostain syystä käy päinsä, joudut vain aina AJAX-pyyntöä käsittelevillä sivuilla muuttamaan pyynnön datan käyttämääsi ISO-8859-1-enkoodaukseen funktiolla iconv tai utf8_decode.
onko ideoita miten tuon voisin pistää, logiikkani mukaan sen pitöisi olla tuossa mutta lopputulos on sama..
$queryString = $db->real_escape_string($_POST['queryString']); $queryString = utf8_decode($queryString);
Oho, suurempi virhe olikin toisessa paikassa. Älä käytä itse escape-funktiota, koska jQuery (tai melkein mikä tahansa muukin AJAX-kirjasto) hoitaa tämän puolestasi.
Jos olisit käyttänyt normaaleja debug-menetelmiä eli tulostanut echolla, mitä teksti PHP-skriptissä sisältää, olisit heti itsekin huomannut tämän.
otin tuon pois, mutta ei korjannut tätä ongelmaa tuo
No mitä jos sitten noudattaisit ehdotusta eli tutkisit echolla, mitä tuolla PHP-puolella oikeasti tapahtuu?
nyt on kokeiltu echottamista ja echottaa näitä hienoja ä merkkejä, koitin str replacella muuttaa noita mutta ei auttanut
Voisikos olla kyseessä tämä sama, jonka piirissa joskus puuhastelin?
https://www.ohjelmointiputka.net/keskustelu/
tällä hetkellä miniulla on sillätavoin että kanta on utf-8 unicodena, kaikki sieltä hakevat tiedostot ovat myös utf-8, kirjaimet näkyvät oikein kannasta haettavaa dataa lukuun ottamatta.
Kuten sanoin, helpointa olisi muuttaa koko järjestelmä UTF-8:ksi ja myös asettaa tietokantayhteyden merkistö ($db->set_charset("utf8")) heti yhdistämisen jälkeen. Käytetystä merkistöstä riippumatta on yleensä huono idea sekoittaa eri merkistöjä järjestelmän eri osissa, ja AJAXin kanssa tämä tarkoittaa, että UTF-8 on viisain valinta.
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
Hoksasin ihan mielenkiintoisen jutun, kun kannassa ääkköset on utf-8 muodossa, niin tämä toimii ainakin minulla:
echo utf8_encode(utf8_decode($row['teksti']));
Pekka Mansikka kirjoitti:
echo utf8_encode(utf8_decode($row['teksti']));
No mutta eihän tuossa ole mitään tolkkua. enkoodaat dekoodatun tekstin ja tulostat sen. Minusta tuon pitäisi toimia identtisesti, jos nuo muunnosfunktiot jättää pois.
Joo :)
Kiitos kaikille avusta, homma selvisi :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.