Tekst vervangen in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rik Engelen

Rik Engelen

14/05/2013 09:50:12
Quote Anchor link
Ik heb in mijn database problemen met de è deze zet hij zo neer CafÚ.
Hoe kan ik dit nu oplossen en de gene waar het fout is gegaan aanpassen dat deze bijvoorbeeld Cafe zo worden.
 
PHP hulp

PHP hulp

16/04/2024 10:44:10
 
Albert de Wit

Albert de Wit

14/05/2013 15:10:47
Quote Anchor link
Heb je het letterlijk in de database al geprobeerd te veranderen?
 
Rik Engelen

Rik Engelen

14/05/2013 15:17:14
Quote Anchor link
Mag ik vragen wat jij bedoelt ?
 
Albert de Wit

Albert de Wit

14/05/2013 15:57:40
Quote Anchor link
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?
 
Rik Engelen

Rik Engelen

14/05/2013 16:02:30
Quote Anchor link
Dat werkt perfect het is met de import fout gegaan.
Het gaat om 50.000 records waar het kan voorkomen.
Heb geen zin om die allemaal te gaan doorlopen.
 
Erwin H

Erwin H

14/05/2013 16:02:41
Quote Anchor link
Wat Albert bedoelt is niet echt relevant, want het zal je geen zier helpen.

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?

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.
 
Rik Engelen

Rik Engelen

14/05/2013 16:05:24
Quote Anchor link
Deze staan op UTF8.
Is er een mannier om de verkeerde nog goed te zetten met preg_replace of zo iets ?
 
Erwin H

Erwin H

14/05/2013 16:07:35
Quote Anchor link
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.
 
Rik Engelen

Rik Engelen

14/05/2013 16:42:24
Quote Anchor link
De character set = utf8 en de Collation is utf8_general_ci

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.
 
Albert de Wit

Albert de Wit

14/05/2013 16:42:37
Quote Anchor link
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.


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.
 
Erwin H

Erwin H

14/05/2013 16:48:25
Quote Anchor link
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.

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?
 
Rik Engelen

Rik Engelen

15/05/2013 09:50:45
Quote Anchor link
Ik zie dat jullie allemaal aan sturen op de browser, maar als ik inlog via MYSQL manager dan zie ik dit probleem ook in de database velden.
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.
 
Erwin H

Erwin H

15/05/2013 09:58:32
Quote Anchor link
Nee, het zit NIET in je database. Jij kan namelijk helemaal niet zien wat er in je database zit. In je database zitten een hoop bits die door een combinatie van karakter set, collatie, connectie en browser instellingen uiteindelijk een teken zullen vormen op je scherm. Heb je niet alle bovenstaande punten correct ingesteld dan krijg je iets anders te zien dan wat je wilt zien.

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.
 
Teun Hesseling

Teun Hesseling

15/05/2013 11:42:28
Quote Anchor link
anders kijken naar htmlspecialchars of htmlentities.
 
Rik Engelen

Rik Engelen

15/05/2013 11:43:01
Quote Anchor link
Wil niet eigenwijs zijn maar denk dat er altijd meerdere wegen zijn tot een oplossing.
Zal die van jou eens goed bekijken.
 
Erwin H

Erwin H

15/05/2013 11:56:38
Quote Anchor link
Ok, doe wat je wilt. Alleen wat je denkt klopt simpelweg niet. Wat jij 'ziet' in de database is niet wat in de database zit. Zolang je dat niet begrijpt zal je de verkeerde oplossingen proberen te vinden.

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function strToHex($string)
{

    $hex='';
    for ($i=0; $i < strlen($string); $i++)
    {

        $hex .= dechex(ord($string[$i]));
    }

    return $hex;
}


echo strToHex('Ú').'<br>';
echo strToHex('é').'<br>';
echo strToHex( $row['je_kolom_met_tekst_uit_database'] );
?>

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.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

15/05/2013 12:12:26
Quote Anchor link
Rik even een andere vraag. Je hebt het over een import, wat voor import?
SQL dump? CSV?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.