Database doorzoeken onafhankelijk van speciale characters
Ik heb een tabel in mijn database met namen. Deze namen bevatten soms bijzondere tekens zoals "é". In het geval van de naam René staat deze naam opgeslagen in de database als "René".
Nu wil ik een zoekfunctie creëren. Normaliter zou ik dit doen met de volgende query:
"SELECT * FROM leden WHERE voornaam LIKE '%$input%'"
Nu wil ik graag zorgen dat het niet uitmaakt of je zoekt op René of op Rèñé of op rene.
Dit kan ik naar mijn idee bewerkstelligen door twee stappen uit te voeren:
1. Ik bewerk $input in php: $input = iconv('UTF-8', 'US-ASCII//TRANSLIT', $input);
2. Ik bewerk tijdelijk alle waarden in de kolom voornaam zodat René Rene wordt. Als ik php zou mogen toepassen binnen mijn query zou deze er als volgt uitzien:
"SELECT * FROM leden WHERE iconv('UTF-8', 'US-ASCII//TRANSLIT', html_entity_decode(voornaam,ENT_COMPAT|ENT_HTML5,"UTF-8")) LIKE '%$input%'"
Kan iemand mij helpen met een vertaling van php naar sql voor stap twee, dan wel een tip geven hoe ik dit probleem op een andere manier kan oplossen?
Vriendelijke groeten, Bob
Wat ik zou doen is het volgende:
- database collatie, database connectie-charset en de HTML charset op UTF-8 (utf8_unicode_ci) instellen.
- alle HTML entities uit de database verwijderen
daarna werkt het en wordt René gevonden door dit te doen:
alle HTML entities uit de database verwijderen.
Vooraleer je een tekst van een gebruiker opslaat, moet je ze escapen, bv. met mysql_real_escape_string.
Verder moet je die tekst gerust laten.
htmlentities gebruik je enkel bij het tonen van de data (dus na een SELECT). Niet bij het inserten of updaten.
Overigens
Geeft ook Rene, rene, Rénè etc. terug
Gewijzigd op 16/09/2013 12:41:15 door Ger van Steenderen
Hartelijk bedankt! Dat is een goede oplossing