Database doorzoeken onafhankelijk van speciale characters

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bob v H

Bob v H

16/09/2013 11:36:59
Quote Anchor link
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
 
PHP hulp

PHP hulp

24/12/2024 02:44:13
 
Frank Nietbelangrijk

Frank Nietbelangrijk

16/09/2013 11:54:58
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM leden WHERE voornaam LIKE %rene%
 
Kris Peeters

Kris Peeters

16/09/2013 12:09:36
Quote Anchor link
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.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

16/09/2013 12:37:43
Quote Anchor link
Let op dat LIKE '%rene%' ook Ireneke etc. krijgt.

Overigens
Code (SQL)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT voornaam, achternaam FROM leden WHERE voornaam = 'rene'

Geeft ook Rene, rene, Rénè etc. terug
Gewijzigd op 16/09/2013 12:41:15 door Ger van Steenderen
 
Bob v H

Bob v H

16/09/2013 12:45:31
Quote Anchor link
Hartelijk bedankt! Dat is een goede oplossing
 



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.