substr et retour chariot

Eléphant du PHP | 66 Messages

17 oct. 2008, 12:48

Bonjour,

J'aimerais couper une chaine de caractère à un nombre max de caractères. J'utilise actuellement:

Code : Tout sélectionner

$text = substr($text, 0, ($maxChar - 1));
Problème: les retours à la ligne comptent apparemment pour 2 caractères, et celà fausse donc la "coupe".

Existe-t-il une solution simple ou dois-je passer par un algo lourdaud? :?

ViPHP
ViPHP | 4039 Messages

17 oct. 2008, 13:29

et du côté wordwrap() ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
fab
ViPHP | 2657 Messages

17 oct. 2008, 15:00

as t'il un caractère au moins que tu es de ne jamais avoir dans ? :) genre <
dans ces cas là tu remplaces tes retour à la ligne par des <
 $text = str_replace('\n','<',$text); 
et après tu fais ta découpe :) et ensuite tu fais un replace inverse :)

Sinon est-ce vraiment grave une erreur d'un caractère ? :)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 66 Messages

17 oct. 2008, 18:35

Merci pour vos réponses!

d'après mes tests, "wordwrap" ne convient pas car il repère et coupe les mots en tant qu'ensemble

et pour l'astuce de fab, j'y avais pensé brièvement mais c'est pas très très propre, on n'est jamais sûr à 100% que certains caractères ne seront pas utilisés... :)

j'ai quand même testé et je me suis aperçu que le str_replace('\n', 'test', $text) ne remplaçait rien du tout: mon retour-chariot n'est pas codé avec '\n' on dirait... J'utilise des pages en UTF-8 et un IDE configuré en UTF-8. Les caractères sont récupérés à partir d'une Modalbox.

J'ai aussi testé le remplacement de '\n\r' et '\u240D' mais rien à faire... :roll:

ViPHP
ViPHP | 4039 Messages

17 oct. 2008, 22:16

j'ai quand même testé et je me suis aperçu que le str_replace('\n', 'test', $text) ne remplaçait rien du tout: mon retour-chariot n'est pas codé avec '\n' on dirait...
Bien sur que si. Tu dois juste utiliser des doubles apostrophes (") et pas des simples ('), sinon php n'interprète pas \n comme un retour à la ligne, mais comme ce qu'il est, \n. Fab a fait une petite erreur, c'est tout.
$text = str_replace("\n","<",$text);
Et personnellement j'utiliserais un autre symbole pour démarquer le saut la ligne, comme la barre | .
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 66 Messages

22 oct. 2008, 14:58

Merci pour votre aide.

Voici finalement le bout de code qui marche:

Code : Tout sélectionner

$text = str_replace("\r\n","|",$text);

ViPHP
ViPHP | 4039 Messages

22 oct. 2008, 15:38

Merci pour votre aide.

Voici finalement le bout de code qui marche:

Code : Tout sélectionner

$text = str_replace("\r\n","|",$text);
utilise ceci plutôt:
$text = str_replace("\r\n|\n","|",$text);
L'encodage des retours à la ligne peut dépendre des plateformes et des navigateurs (enfin, ça dépend d'où vient le texte au départ).
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.