8797 sujets

Développement web côté serveur, CMS

Bonjour à tous.

Soit un texte : la dictée Prosper Mérimée.

Le code
<?php
$texte="Pour parler sans ambigüité, ce diner à Sainte-Adresse, près du Havre, malgré les effluves embaumés de la mer, malgré les vins de très bons crus, les cuisseaux de veau et les cuisseaux de chevreuil prodigués par l’amphitryon, fut un vrai guêpier.
Quelles que soient, quelque exigües qu’aient pu paraitre, à côté de la somme due, les arrhes qu’étaient censés avoir données la douairière et le marguiller, il était infâme d’en vouloir, pour cela, à ces fusiliers jumeaux et malbâtis, et de leur infliger une raclée, alors qu’ils ne songeaient qu’à prendre des rafraichissements avec leurs coreligionnaires. Quoi qu’il en soit, c’est bien à tort que la douairière, par un contresens exorbitant, s’est laissé entrainer à prendre un râteau et qu’elle s’est crue obligée de frapper l’exigeant marguiller sur son omoplate vieillie.
Deux alvéoles furent brisés ; une dysenterie se déclara suivie d’une phtisie et l’imbécilité du malheureux s’accrut.
« Par saint Martin, quelle hémorragie ! » s’écria ce bélitre.
À cet évènement, saisissant son goupillon, ridicule excédent de bagage, il la poursuivit dans l’église tout entière.
";
$signe=mb_strlen($texte);
echo $signe;
?>

affiche 1205 caractères, alors que Notepad++ et Word en trouvent 1115. D'après différents essais, Word semble toujours trouver la bonne valeur.

Quelle routine proposeriez-vous pour arriver au bon résultat ? Merci pour vos explications.
Hello,

Peu être que dans ton code les caractères invisibles comme les retours à la ligne sont comptés, alors que sur Word et Notepad++ ils sont ignorés.

Pour vérifier ça, essaie de faire tenir ta dictée sur une seul ligne dans ton code. Ca va aller loin sur la droite, mais au moins tu élimine ce cas de figure.

Enfin, si c'est bien un problème de fonction, vérifie s'il n'existe pas un paramètre optionnel pour ne pas prendre en compte ces caractères.

EDIT: Sauf erreur, à chaque retour à la ligne, il y a deux caractères invisibles : le saut de ligne, et le retour chariot. Il y a 5 retour à la ligne dans ta dictée, donc 10 caractère invisibles. Et il s'agit bien du nombre en plus constaté dans ton code.

EDIT 2: J'ai carrément mal lu les deux chiffres, donc c'est pas du tout ça le problème. Navré !
Modifié par Anymah (11 Jul 2012 - 19:58)
Tu as bien déclaré ton charset en UTF-8 pour l'extenstion mbstring ?


// à placer avant tout appel à la bibliothèque mbstring
mb_internal_encoding('UTF-8');


EDIT: si je fais ça et qu'en plus je supprime les retours ligne j'ai bien le même résultat que Word.


mb_internal_encoding('UTF-8');

$texte = "Pour parler sans ambigüité, ce diner à Sainte-Adresse, près du Havre, malgré les effluves embaumés de la mer, malgré les vins de très bons crus, les cuisseaux de veau et les cuisseaux de chevreuil prodigués par l’amphitryon, fut un vrai guêpier.
Quelles que soient, quelque exigües qu’aient pu paraitre, à côté de la somme due, les arrhes qu’étaient censés avoir données la douairière et le marguiller, il était infâme d’en vouloir, pour cela, à ces fusiliers jumeaux et malbâtis, et de leur infliger une raclée, alors qu’ils ne songeaient qu’à prendre des rafraichissements avec leurs coreligionnaires. Quoi qu’il en soit, c’est bien à tort que la douairière, par un contresens exorbitant, s’est laissé entrainer à prendre un râteau et qu’elle s’est crue obligée de frapper l’exigeant marguiller sur son omoplate vieillie.
Deux alvéoles furent brisés ; une dysenterie se déclara suivie d’une phtisie et l’imbécilité du malheureux s’accrut.
« Par saint Martin, quelle hémorragie ! » s’écria ce bélitre.
À cet évènement, saisissant son goupillon, ridicule excédent de bagage, il la poursuivit dans l’église tout entière.";

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

// affiche 1115

Modifié par jb_gfx (11 Jul 2012 - 20:13)
Merci Anymah et jb_gfx. Smiley biggrin

Si vous l'essayez, vous verrez que le nombre de caractères indiqué par la page boutique/devis.php est maintenant plus fiable. Je viens de l'essayer sur des textes simples de 500 signes à 80 000 signes. Cela donne le même résultat que Word.

Je l'ai essayé sur un roman.
Word : 500 173.
Routine : 500 195 soit une majoration de 22.

Puis sur un mémoire.
Word : 17 593.
Routine : 17 604 soit une majoration de 11.

La différence vient probablement des sauts de page, des appels de notes, etc. Où trouve-t-on un tableau du mode étendu ?

Edit : JB-gfx, je t'ai envoyé un message qui pourrait t'intéresser.
Modifié par Pyanepsion (12 Jul 2012 - 09:18)