Multibyte check

Door Marthijn Buijs, 11 jaar geleden, 19.562x bekeken

Deze snippet is een simpele PHP-function die controleert of een string multibyte-karakters bevat (dit zijn karakters die bijvoorbeeld een trema op een letter hebben). Als de string multibyte-karakters bevat wordt het resultaat true en anders false.

Hoe werkt het?
De strlen-functie telt het aantal bytes in de string. De mb_strlen-functie doet hetzelfde alleen werkt ook met speciale tekens die meerdere bytes bevatten.

Voorbeeld
Hier komt een voorbeeld. Laten we als voorbeeld ' ♪ ' nemen.
De strlen-functie zal 3 (bytes) geven.
De mb_strlen-functie zal 1 (karakter) geven.
De getallen 1 en 3 zijn niet gelijk aan elkaar en daarom zal deze functie true als resultaat geven.



Code

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

function mb_check($string) {
    return strlen($string) !== mb_strlen($string);
}


?>

Gesponsorde koppelingen

PHP script bestanden

  1. mb_check.php

 

Er zijn 4 reacties op 'Multibyte check'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen


10 jaar geleden
 
0 +1 -0 -1
Slim bedacht!
In welke situatie kan ik het gebruiken?
Marthijn Buijs
Marthijn Buijs
10 jaar geleden
 
0 +1 -0 -1
Haha bedankt!

Je kan het gebruiken in situaties waarin je moet controleren of een string multibyte-karakters bevat zoals bij het controleren of het wel een gebruikersnaam is wat de user heeft ingevoerd.
Ozzie PHP
Ozzie PHP
10 jaar geleden
 
0 +1 -0 -1
>> ... dit zijn karakters die bijvoorbeeld een trema op een letter hebben

>> ... zoals bij het controleren of het wel een gebruikersnaam is wat de user heeft ingevoerd.

En wat als iemand een gebruikersnaam met een trema heeft? Bijv. Ariën?
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen


10 jaar geleden
 
1 +1 -0 -1
Ik vind het idee heel aardig, maar ik vraag me toch iets af.

Als ik het goed zie heb je een functie gemaakt genaamd "mb_check" die kijkt of de lengte van strlen() overeenkomt met de lengte van mb_strlen().
- strlen() telt technisch gezien niet het aantal karakters, maar het aantal bytes, ongeacht de encoding.
- mb_strlen() telt het aantal multibyte-karakters, aannemende dat de string een valide multibyte string is, en aannemende dat de encoding van de multibyte string overeenkomt met de eerder ingestelde multibyte encoding in PHP, door het script zelf of in PHP geconfigureerd.
De werking van mb_check kan dus per omgeving verschillen.

Als de werking meer gecontroleerd zou worden, vraag ik me af wat een toepassing zou kunnen zijn. Stel, het aantal bytes is gelijk aan het aantal myltibyte karakters van een string. Wat zou je met die kennis kunnen doen?

In het geval van het meest voorkomende voorbeeld, UTF-8, weet je dat er gebruik wordt gemaakt van alleen standaard US-ASCII tekens, inclusief allerlei control-tekens en niet adrukbare tekens, zoals 0x08 (backspace). Dan weet je nog steeds niet of het een geldige gebruikersnaam betreft, want in de meeste systemen kun je zelfs geen tab hebben in de gebruikersnaam.

Een ander praktisch voorbeeld: je wilt UTF-8 data exporteren naar een ASCII-systeem, dan weet je met deze functie hooguit OF er Unicide-karakters voorkomen die niet te relateren zijn aan ASCII-karakters. Je kunt dan niet een 'next best' actie doen, zoals alle overige karakters transcoden en de onbekende karakters vervangen voor bv. vraagtekens.

Het lijkt me handiger om bij deze twee voorbeelden gebruik te maken van een multibyte regex-functie.
Maar misschien mis ik iets?

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. mb_check.php

Labels

Navigatie

 
 

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.