Hallo allemaal,

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
Als je de html entities op gaat slaan in je database dan wordt het natuurlijk moeilijk zoeken.

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:

SELECT * FROM leden WHERE voornaam LIKE %rene%
Ja.
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.
Let op dat LIKE '%rene%' ook Ireneke etc. krijgt.

Overigens
[code lang="SQL"]
SELECT voornaam, achternaam FROM leden WHERE voornaam = 'rene'
[/code]
Geeft ook Rene, rene, Rénè etc. terug
Hartelijk bedankt! Dat is een goede oplossing

Reageren