letters met accenten worden vreemde tekens

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3

Ozzie PHP

Ozzie PHP

25/06/2021 17:30:50
Quote Anchor link
Ja, maar die keur jij niet goed nu.
 
PHP hulp

PHP hulp

03/08/2021 23:36:10
 
Willem vp

Willem vp

25/06/2021 17:39:00
Quote Anchor link
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.
 
G P

G P

25/06/2021 17:51:53
Quote Anchor link
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>';

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
 
Ivo P

Ivo P

25/06/2021 17:55:54
Quote Anchor link
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.
 
G P

G P

25/06/2021 17:58:06
Quote Anchor link
Dus:
} elseif(!preg_match("#[aeoui]#i", $_POST['bericht'])){
 
Ivo P

Ivo P

25/06/2021 17:58:33
Quote Anchor link
ik denk trouwens dat jou é niet naar à wordt omgezet, maar naar à + nog een tweede "raar" teken.
 
G P

G P

25/06/2021 18:03:30
Quote Anchor link
Klopt: é

Toevoeging op 25/06/2021 18:06:20:

é = é
è = è
à = Ã
 
Ivo P

Ivo P

25/06/2021 18:15:11
Quote Anchor link
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.
 
G P

G P

25/06/2021 18:34:04
Quote Anchor link
En hoe zorg je er dan voor dat dit niet meer gebeurt?
 
- Ariën -
Beheerder

- Ariën -

25/06/2021 18:55:03
Quote Anchor link
Niet uitgetest, maar mogelijk werkt dit?
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
 
Ivo P

Ivo P

25/06/2021 19:12:46
Quote Anchor link
even terug naar de openingsvraag.

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.
 

Pagina: « vorige 1 2 3



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.