Om spam te voorkomen gebruik ik in een mailform oa deze code


} elseif(!preg_match("/^[A-Za-z0-9-_.+%]/", $_POST['bericht'])){ 
    echo ' Geen vreemde tekens in je bericht aub.<br><br>'; 
    echo '<a href="javascript:history.back(1);">Terug</a><br><br>'; 


Vreemd genoeg worden letters met een accent (zoals é è à) en accenten ook tegengehouden. Maar wat blijkt: deze letters met een accent worden omgezet in à (hoofdletter A en een tilde).

Hoe kan ik er voor zorgen dat de letters met een accent wel toegelaten worden, maar de à niet?
Ja, maar die keur jij niet goed nu.
G P op 25/06/2021 17:25:00

Die afzonderlijke ´of `zijn toch accenten die gebruikt worden bij bv 's morgens?

Officieel heet dat dan geen accent, maar een apostrof. Maar ongeacht hoe je het noemt zul je het wel expliciet moeten opnemen in je regex.

Zoals Ivo al zei in het begin van dit draadje: het is makkelijker om te filteren op wat er niet in mag, dan om te filteren op wat er wel in mag.
Dus, simpelweg gezegd: als de letters a, e, o, i en u er niet inmogen, dan zeg ik gewoon dit?

} elseif(!preg_match("aeoiu", $_POST['bericht'])){
echo ' Deze letters mag je niet gebruiken.<br><br>';
echo '<a href="javascript:history.back(1);">Terug</a><br><br>';

[size=xsmall]Toevoeging op 25/06/2021 17:55:03:[/size]

Het hoofdprobleem is dat à niet gebruikt mag worden, maar éèà wel. Maar die worden bij de verwerking omgezet naar een Ã. Hoe zorg ik er dan voor dat éèà wel gebruikt kan worden maar à niet?
nee: een regex benodigd scheidingstekens. Vaak wordt / of ~ gebruikt, ik gebruik meestal #

En dan zou aeoiu precies die 6 letters op die volgorde betekenen. Jij zoek een reeks: die staat tussen []

dus:

"#[aeoui]#i"

Dat matcht op minstens 1 a ergens in de string, Maar ook op minstens 1 e in de string etc.

en de i heb ik erbij gezet om ook op A, E O etc te zoeken.
Dus:
} elseif(!preg_match("#[aeoui]#i", $_POST['bericht'])){
ik denk trouwens dat jou é niet naar à wordt omgezet, maar naar à + nog een tweede "raar" teken.

Klopt: é

[size=xsmall]Toevoeging op 25/06/2021 18:06:20:[/size]

é = é
è = è
à = Ã
Dat is typisch voor het weergeven van een multibyte (2 byte) karakter in een single byte omgeving.

Nu bestaat é uit twee bytes. De eerste byte komt overeen met het teken à het tweede deel met het © teken.

Dit staat vast ook in de eerder genoemde tutorial.
En hoe zorg je er dan voor dat dit niet meer gebeurt?

Reageren