Hallo allemaal

Om spam tegen te gaan heb ik onderstaande code in een formulier toegevoegd.

Een maat van mij, waar ik een website voor schreef, krijgt klachten van klanten die geen berichtjes kunnen sturen als er bepaalde woorden in gebruikt worden. Het gaat namelijk bv om het woord cliënt.

Ondanks ik niet verboden heb een ë te gebruiken in de code onderaan, wordt dit niet weerhouden. Het zou thans wel moeten kunnen dat sommige leestekens boven de letters (zoals ¨´) wel gebruikt moeten worden.

Dit is de code


<?php
} elseif(!preg_match("/^[A-Za-z0-9-_.+%]/", $_POST['onderwerp'])){ 
    echo ' Geen vreemde tekens in het onderwerp aub.<br><br>'; 
    echo '<a href="javascript:history.back(1);">Terug</a><br><br>'; 
} elseif(preg_match("/[~`§µÐс†|©®]/", $_POST['onderwerp'])) {   
    echo ' Er zijn in het onderwerp vreemde tekens gedetecteerd.<br>Gelieve deze uit het onderwerp te halen aub.<br><br>'; 
    echo '<a href="javascript:history.back(1);">Terug</a><br><br>'; ?>


Wat kan ik doen om dit goed te krijgen?
Probeer in plaats van:

"/^[A-Za-z0-9-_.+%]/"

eens

"/^[A-Za-z0-9-_.+%]/[color="red"]u[/color]"
In plaats van alles te verbieden, behalve wat _jij_ goedkeurt, kun je misschien beter kijken, naar wat je juist niet in je tekst wilt hebben.

En voor e-mail zal dat hoofdzakelijk beperkt zijn tot HTML.

Dus als je < en > zou verbieden, zou dat je probleem al tackelen.
Zij het, dat je dan ook de tekst "alleen voor kinderen < 12 jaar" niet kunnen invoeren.

Daarom zou je ook voor strip-tags() kunnen gaan: je verwijdert dan gewoon alle html uit je invoer.

Want welke schade richt een copyright-c © aan? En waarom mag een spaanse N niet? ñ komt in spaanse teksten en mogelijk namen voor.
Ooit heb ik op een PHP congres een IJslandse PHP-er aangehoord. Die heeft zo'n "kromme d" in zijn naam.
En die is er dus fel op, dat dat vaak niet lukt.

Veel van die vreemde tekens wordt gebruikt in spam, vandaar. Maar eigenlijk is het de bedoeling dat die vreemde tekens dus niet gebruikt mogen worden, maar letters met een accent of trema wel.

Dus wel:
ä ë ï ö ü
à è ù
á é
ñ

niet:
al die vreemde tekens die in spam gebruikt worden.
Heb je mijn antwoord al getest?
G P op 11/03/2021 14:07:50

[quote="Ivo P op 11/03/2021 13:22:08"]
In dat geval zou je op https://stackoverflow.com/questions/2133758/how-do-i-match-accented-characters-with-php-preg aanwijzingen kunenn vinden.


Heb even gekeken. Uit die regex geraak ik niet wijs uit, volgens mij is daar ook geen oplossing voor gevonden.


[size=xsmall]Toevoeging op 11/03/2021 14:08:12:[/size]


[/quote]


/^[\p{L}-]*$/u
zou unicode letters (word characters) matchen.
Daaronder vallen ook cijfers.
Maar welke "rare" letters vallen onder de term letter, is afhankelijk van de setLocale() settings. (staat een voorbeeldje van een Italiaan).

Als je bepaalde tekens ook zou willen toestaan, dan kun je die toevoegen. Bijvoorbeeld ook *, punt en komma:

/^[\p{L}*\.,-]*$/u


Waarom gebruik je niet Intl?
Voordelen kunnen zijn de spoofchecker en grapheme-functies voor filteren op metadata van karakters...

Reageren