8710 sujets

Développement web côté serveur, CMS

Bonjour,

J'essaye de compter les nombre de caractères de d'un texte qui contient évidemment des espaces et des caractères accentués.
J'ai compté les caractères et les espaces : 379

$text = 'blablablablablabla';

$text_len = strlen( $text ) ;

Résultat strlen : 426

Rmq : j'ai mis la chaîne dans un tableau pour voir ce qu'il se passe en réalité:
$array_split = str_split($text);

Résultat : 426 mais il y a 4 lettres accentuées dans le texte qui apparaissent comme un losange content un ? et celles-ci sont doublées. Donc sans le problème encodage :
426 - 4 = 422

J'ai besoin de compter les caractères et de détecter les espaces pour pouvoir formater le texte en provoquant un retour ligne dans les espaces et non au milieu d'un mot.

Qu'est-ce que compte strlen ? caractères + espaces ? rien que les caractères ? les octets?

Pourquoi ce problème d'encodage ? Mon Notepad est en UTF-8


Les résultats étant aberrants je ne peux continuer à développer.

Merci pour votre aide.
Ca sens le problème d'encodage à plein nez cette histoire.

D'où proviens ta chaîne de caractère ? D'une base de donnée ? Est-ce que le texte retournée est bien propre?

A voir, le texte retournée n'est pas bien encodée, je regarderai donc du côté de la source.

Pour compter comme strlen, fait un echo de ta chaîne, et compte chaque caractère.
Pour être précis, fait un echo et compte ce qui apparaît en code source ^^ (  compte pour 6 caractères).

D'ailleurs pourquoi faire la césure soi-même ? Smiley biggol un texte avec des espaces normaux en justifié ne suffirait pas ?
Mouais, en UTF-8 il faut utiliser les fonctions mbstring. Donc dans ton cas ça sera mb_strlen() et pas strlen().

Les deux fonctions comptent les caractères mais strlen() ne connais pas UTF-8 donc certains caractères peuvent être comptés de 1 à 4 fois.

Ensuite ces fonctions comptes TOUS les caractères. Donc si tu as des retours lignes dans ton texte ils sont aussi comptabilisés.


echo mb_strlen(str_replace(array("\r", "\n"), '', $texte), "UTF-8");

Modifié par jb_gfx (13 Mar 2013 - 01:34)