Charset problemen SQLSRV
Ik gebruik charset=iso-8859-1 op mijn php webpagina's. Dit omdat de database een MS SQL DB is met LATIN1_GENERAL_100_CS_AS. Nu wanneer ik gewoon een tabel inlaadt op mijn pagina en weergeef dan wordt dit correct weergegeven spaties zijn spaties, speciale karakters worden correct getoond.
Nu wanneer ik via een AJAX CALL een php functie pagina aanroep die een bepaald element moet opvullen worden gegevens weergegeven met diamantjes met vraagtekens. Ik krijg dit maar niet opgelost.
De gegevens zijn ingeladen in mijn DB vanuit een ander programma. Wanneer ik het correct wil op het scherm weergeven moet ik elke letter en elke spatie hertypen of veranderen in de SQL MANAGEMENT STUDIO zodat hij dit correct weergeeft.
Heeft iemand een idee wat er precies fout is of wat ik moet veranderen om dit correct te laten weergeven?
1) collatie e.d. van je database correct
2) verbinding naar je database correct
3) juiste http header meesturen
1 zal wel goed zijn. 2 lijkt me ook (maar check het zou ik zeggen). 3 daar zou het probleem in dit geval waarschijnlijk zitten. Als je een hele pagina opbouwt heb je misschien een meta tag erin staan, maar die wordt niet gezien als je een ajax request doet. Waar ik dus altijd voor zorg is dat ik de juiste http header meegeef, zodat de browser weet hoe de text gerenderd moet worden:
Check wel wat jouw header zou moeten zijn. Hier ga ik dus uit van json en utf-8 (mijn standaard), dat kan bij jou natuurlijk anders zijn.
Gewijzigd op 14/08/2013 16:37:15 door Erwin H
Erwin H op 14/08/2013 16:37:01:
De standaard drie punten eigenlijk weer:
1) collatie e.d. van je database correct
2) verbinding naar je database correct
3) juiste http header meesturen
1 zal wel goed zijn. 2 lijkt me ook (maar check het zou ik zeggen). 3 daar zou het probleem in dit geval waarschijnlijk zitten. Als je een hele pagina opbouwt heb je misschien een meta tag erin staan, maar die wordt niet gezien als je een ajax request doet. Waar ik dus altijd voor zorg is dat ik de juiste http header meegeef, zodat de browser weet hoe de text gerenderd moet worden:
Check wel wat jouw header zou moeten zijn. Hier ga ik dus uit van json en utf-8 (mijn standaard), dat kan bij jou natuurlijk anders zijn.
1) collatie e.d. van je database correct
2) verbinding naar je database correct
3) juiste http header meesturen
1 zal wel goed zijn. 2 lijkt me ook (maar check het zou ik zeggen). 3 daar zou het probleem in dit geval waarschijnlijk zitten. Als je een hele pagina opbouwt heb je misschien een meta tag erin staan, maar die wordt niet gezien als je een ajax request doet. Waar ik dus altijd voor zorg is dat ik de juiste http header meegeef, zodat de browser weet hoe de text gerenderd moet worden:
Check wel wat jouw header zou moeten zijn. Hier ga ik dus uit van json en utf-8 (mijn standaard), dat kan bij jou natuurlijk anders zijn.
Ik zie wel wat je bedoeld maar hoe kan ik de header correct meegeven als ik volgende code heb:
jQuery(document).ready(function($){
$('#vendorcode').autocomplete({source:'php/details/suggest_vendor.php', minLength:2});
});
Gewoon in sueggest_vendor.php. Dat is gewoon een php script en eigenlijk moet je bij elke output van een php script naar de browser de juiste headers meegeven. Wat voor type content is, hoe lang, charset, taal etc etc. Dat doet geen hond, maar eigenlijk zou dat wel moeten. Bij een ajax call is dat niet anders.
Het is soms gewoon bij spaties maar bij de helft loopt dit dan wel correct. Wanneer ik van de gegevens in de database manueel de spaties ga hertypen worden deze wel correct weergegeven.
Ik snap er niets van!
(en dan natuurlijk de juiste instellingen voor jouw database)
Iets soortgelijks zal je denk ik voor MSSQL moeten zien te vinden.
Erwin H op 14/08/2013 17:45:58:
Dan is het probleem mogelijk dat je de connectie met je database niet goed hebt staan. Elke keer dat je connectie maakt met de database (zowel bij een insert, als bij een select query) moet je ervoor zorgen dat de connectie ook in de juiste collatie is. Zo niet, dan worden dan al de gegevens verkeerd geinterpreteerd. Nu heb ik persoonlijk geen ervaring met MSSQL, dus ik kan je niet vertellen welke instellingen je moet maken, of welke query je moet draaien. Bij MySQL is het
(en dan natuurlijk de juiste instellingen voor jouw database)
Iets soortgelijks zal je denk ik voor MSSQL moeten zien te vinden.
(en dan natuurlijk de juiste instellingen voor jouw database)
Iets soortgelijks zal je denk ik voor MSSQL moeten zien te vinden.
Ik denk dat de fout daar echt niet zit. Het zit zo: Ik ga voer een query uit en krijg nu en dan een "diamantje met vraagteken" in de plaats van een gewone SPATIE maar sommige andere spaties lopen wel correct.
Wanneer ik dan naar de SQL MANAGEMENT STUDIO ga, en ik doe edit van een tabel dan kan je daarin rechstreeks data veranderen. Als ik daar bij een tekstveld (waarvan er een "diamantje met vraagteken" was) aanpas en de spaties opnieuw ga typen.
Ik voer vervolgens de pagina weer uit dan is het diamandje met vraagteken weg en wordt dat tekstveld correct weergegeven!
Het is heel vreemd!
Waar komt de data vandaan?
PS het is totaal niet nodig om een hele post te quoten, als die er recht boven staat.
mb_convert_encoding een optie.
Misschien is $str = base64_encode(utf8_encode($row["Name"]));
$str = base64_decode($str);
$data[] = array
( 'label' => $row['No'] .', '.$str,
'value' => $row['No']
);