Tekst vervangen in database
Hoe kan ik dit nu oplossen en de gene waar het fout is gegaan aanpassen dat deze bijvoorbeeld Cafe zo worden.
Heb je het letterlijk in de database al geprobeerd te veranderen?
Mag ik vragen wat jij bedoelt ?
Dan ga je naar phpmyadmin en ga je naar je database. Daar kies je de desbetreffende tabel en verander je letterlijk de waarde van CafÚ naar Café. Doet hij het dan wel?
Het gaat om 50.000 records waar het kan voorkomen.
Heb geen zin om die allemaal te gaan doorlopen.
Hoe iets in de database is opgeslagen is niet jouw probleem, hoe je het op het scherm wilt krijgen, daar gaat het om. Daarvoor zijn er 3 (soms 4) stappen van belang.
1) stel je database collatie goed in. Over het algemeen zijn utf8_general_ci of utf8_unicode_ci de beste, maar andere sets kunnen al voldoende zijn.
2) zorg dat je je connectie met de database goed hebt, daar heb je de juiste karakter set en de juiste collatie nodig
3) verstuur de juiste headers naar de browser, zodat ook de browser weet op welke manier de tekst moet worden geinterpreteerd
4) eigenlijk hetzelfde als stap 3, maar dan niet via een header, maar via een meta tag in je html. Eigenlijk kan je deze stap wel weglaten, als je de header juiste verstuurt moet dat voldoende zijn.
Toevoeging op 14/05/2013 16:03:58:
Albert de Wit op 14/05/2013 15:57:40:
Ik neem even voor het gemak aan dat je binnen XAMPP werkt.
Dan ga je naar phpmyadmin en ga je naar je database. Daar kies je de desbetreffende tabel en verander je letterlijk de waarde van CafÚ naar Café. Doet hij het dan wel?
Dan ga je naar phpmyadmin en ga je naar je database. Daar kies je de desbetreffende tabel en verander je letterlijk de waarde van CafÚ naar Café. Doet hij het dan wel?
Het spijt me Albert, maar dat is echt totale onzin. Dit zal je NOOIT gaan helpen met dit soort problemen, zolang je collatie van de database, connectie en de juiste HTML headers niet gebruikt.
Is er een mannier om de verkeerde nog goed te zetten met preg_replace of zo iets ?
Rik Engelen op 14/05/2013 16:05:24:
Deze staan op UTF8.
Wat staat op UTF8?
En nee, met preg_replace zal je weinig tot niets kunnen uitrichten. 9 van de 10 keer zit het probleem namelijk in het feit dat de browser de tekens niet goed interpreteert en dat kan je op die manier niet verhelpen.
Het probleem is dat in de DB nu die waardes fout staan en dit ook fout op de site komt.
ik wil eigelijk zoeken met php preg_match naar die verkeerde U en die dan vervangen met preg_replace alleen weet de juiste syntax niet helaas.
Erwin H op 14/05/2013 16:02:41:
Wat Albert bedoelt is niet echt relevant, want het zal je geen zier helpen.
Het spijt me Albert, maar dat is echt totale onzin. Dit zal je NOOIT gaan helpen met dit soort problemen, zolang je collatie van de database, connectie en de juiste HTML headers niet gebruikt.
Het spijt me Albert, maar dat is echt totale onzin. Dit zal je NOOIT gaan helpen met dit soort problemen, zolang je collatie van de database, connectie en de juiste HTML headers niet gebruikt.
Dat is eigenlijk precies waar ik naartoe wilde... Ik wou kijken of hij de collatie wel goed had staan. Ik nam aan dat TS er niet de meeste verstand van had sinds hij al vroeg hoe hij het letterlijk in de database moest veranderen.
Rik Engelen op 14/05/2013 16:42:24:
De character set = utf8 en de Collation is utf8_general_ci
En stel je de verbinding goed in (stap 2) en geef je de juiste headers mee (stap 3). Zonder die stappen kan de collatie goed zijn, maar krijg je nog niet het juiste resultaat in veel gevallen.
Rik Engelen op 14/05/2013 16:42:24:
Het probleem is dat in de DB nu die waardes fout staan en dit ook fout op de site komt.
ik wil eigelijk zoeken met php preg_match naar die verkeerde U en die dan vervangen met preg_replace alleen weet de juiste syntax niet helaas.
ik wil eigelijk zoeken met php preg_match naar die verkeerde U en die dan vervangen met preg_replace alleen weet de juiste syntax niet helaas.
Dat kan niet, want wat je op je scherm krijgt is niet wat er in de database staat. Wat je op het scherm krijgt is een interpretatie van de browser. Die preg_match, of welke vervanging dan ook, gaat over het algemeen geen zier helpen. Daarnaast is het ook nog eens onbegonnen werk als het wel al zou kunnen. Nu heb je die e met een accent, maar heb je enig idee hoeveel verschillende karakters je wel niet kan maken met alle verschillende accenten en andere extra's?
Dus het zit echt daar.
Mij lijkt het dat ik ga zoeken met php op die verkeerde Ú.
en die dan vervang met preg_replace alleen als ik dit doe
preg_replace("/Ú/", 'e' $waarde); vind hij niks dus ik denk dat de preg_replace verkeerd zit. Ow hier kan het natuurlijk ook fout gaan op browser niveau.
Of kan ik dit ook met mysql uitvoeren dan doe ik het rechstreeks in MYSQL manager.
Voorbeeld, in een database heb ik staan Pápa,selecteer ik dat record via de commandline tool van mysql, dan zie ik Pßpa.
Maar goed, als je eigenwijs wilt zijn moet je dat vooral doen, wil je het oplossen dan raad ik je aan mijn punten die ik eerder al heb gepost nog eens goed door te lezen en op te volgen.
anders kijken naar htmlspecialchars of htmlentities.
Zal die van jou eens goed bekijken.
Daarnaast zijn er vast meerdere wegen, maar de manier van preg_replace is er daar niet 1 van. De reden is, wederom, dat wat jij 'ziet' in de database er helemaal niet is. Dus in je string die je in php krijgt staat helemaal geen 'Ú'. preg_replace zal die dus ook niet kunnen vinden en dus ook niet kunnen vervangen.
Dit kan je overigens testen door de string te converteren naar een hex waarde. Doe bijvoorbeeld eens dit:
Code (php)
Dit converteert de gegeven strings naar een HEX waarde. Hiermee kan je controleren welke karakters daadwerkelijk in de string zitten, zonder de interpretatie van de browser en dergelijke. De eerste is die 'Ú' die jij denkt te zien in je database. Check of die HEX waarde ook in de string zit die uit je database komt. Zo niet, dan kan geen enkele vervang actie je helpen.
SQL dump? CSV?