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?
Gesteld wordt dat er een regex check is, en dat er een verschijnsel is, dat letters met accenten omgevormd worden tot een raar teken.
Dat heeft echter niets met elkaar te maken. In elk geval niet rechtstreeks.
De controle met de regex deugt niet: die checkt slechts of de invoer met een toegelaten teken begint!
Daarna is er het probleem dat TS op de een of andere manier de multibyte aangevoerde data verwerkt als single byte.
En ergens wordt dat daardoor weergegeven als 2 rare tekens.
Die regex is al aardig gecoverd in dit topic, maar laat TS eerst eens uitzoeken op welke plekken hij welke tekenset gebruikt.
Ik kan al raden dat het bij het invoerscherm utf-8 is.
Maar wordt dat ook aangegeven bij
- het opslaan
- het weergeven van de invoer
?
Dát is mi. hij punt dat eerst opgelost moet worden.
Het is niet zo dat door de toepassing van de regex de invoer veranderd wordt in 2 tekens.
Grondregel is over het algemeen: kies een tekenset en gebruik dat overal (invoer, database, database-connectie, uitvoerscherm, uitvoerpdf, email etc)
Als het dan voorkomt dat je toch een andere tekenset aangeleverd krijgt (omdat je via een connectie met een webservice het weerbericht in iso-8859 krijgt, dan vorm je dat bewust om naar de gebruikte set en werk je daarna verder.
Ik denk dat je op de locatie waar je nu die à ziet, vergeten bent om de tekenset aan te geven aan de browser.