letters met accenten worden vreemde tekens
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.
} 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>';
Toevoeging op 25/06/2021 17:55:03:
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?
Gewijzigd op 25/06/2021 17:52:51 door G P
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.
} elseif(!preg_match("#[aeoui]#i", $_POST['bericht'])){
ik denk trouwens dat jou é niet naar à wordt omgezet, maar naar à + nog een tweede "raar" teken.
Toevoeging op 25/06/2021 18:06:20:
é = é
è = è
à = Ã
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?
https://www.php.net/manual/en/function.mb-ereg-match.php
Er is overigens een schat aan multibyte functions:
https://www.php.net/manual/en/ref.mbstring.php
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.