Comment obtenir la longueur d'une chaîne de caractères contenant des références tout en comptant les références de caractères comme un seul caractère?

StackOverflow https://stackoverflow.com/questions/3933102

  •  30-09-2019
  •  | 
  •  

Question

Comment puis-je obtenir la longueur de la chaîne qui contient également des références de caractères? Je veux compter que le nombre de caractères qui seront affichés dans le navigateur. Comme

$raw = "Stack&#00f9"    =  Length = 6  
$raw = "Stack12345"  = Length = 10  
$raw = "Stack&#00f9&#00f9" = Length = 7  

Merci à l'avance

Était-ce utile?

La solution

J'aller avec:

$len = mb_strlen(html_entities_decode($myString, ENT_QUOTES, 'UTF-8'),'UTF-8');

Bien que je première question pourquoi vous avez des entités HTML dans vos chaînes, par opposition à la manipulation UTF-8 réelles chaînes codées.

En outre, faites attention à ce que vos entités HTML ne sont pas écrites correctement (dont ils ont besoin à la fin avec un point-virgule). Si vous n'ajoutez pas le point-virgule, toutes les fonctions liés aux entités échouera, et de nombreux navigateurs ne parviennent pas à rendre vos entités correctement.

Autres conseils

Comme vos chaînes contiennent encodages littérale de caractères unicode (plutôt que d'être, par exemple, codage UTF-8), vous pouvez obtenir la longueur en les remplaçant simplement par un caractère factice, ainsi:

$length=strlen(preg_replace('/&#[0-9a-f]{4}/', '_', $raw));

Si elles étaient encodé avec quelque chose de PHP comprend, comme UTF-8, vous pouvez utiliser mb_strlen() intead.

strlen est une fonction de chaîne mono-octet qui ne parvient pas sur les chaînes mutli-octets comme il renvoie seulement le nombre de octets plutôt que le nombre de caractères (depuis dans les chaînes octet chaque octet représente un caractère).

Pour les chaînes multi-octets utiliser homologue multi-octets de strlen mb_strlen au lieu et ne pas oublier de préciser le bon le codage des caractères.

Et pour avoir des références de caractères HTML être interprétées comme un seul caractère, utilisez html_entity_decode pour les remplacer par les personnages qu'ils représentent:

$str = html_entity_decode('Stackù', ENT_QUOTES, 'UTF-8');
var_dump(mb_strlen($str, 'UTF-8'));  // int(6)

Notez que &#00f9 n'est pas une référence de caractère valide car il manque un ou x X après &# pour la notation hexadécimale et un ; après la valeur hexadécimale.

Jetez un oeil à mb_strlen

mb_strlen('string' , 'UTF-8');
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top