[PHP] éviter les mots orphelins dans un texte
Bonjour,
J'ai déjà une fonction bien pratique qui remplace l'espace entre les deux derniers mots d'un paragraphe par "& n b s p ;" afin d'éviter d'avoir un mot orphelin sur une seule ligne. Ce n'est jamais beau un mot orphelin!
voici le code :
Mon problème aujourd'hui est le suivant, j'ai de gros bloc de textes dans une base de données qui contiennent plusieurs paragraphes par enregistrement. Quand je le passe dans cette fonction, il ne traite que le dernier paragraphe. C'est logique de la façon dont elle est écrite.
Comment puis-je modifier ma fonction afin de pouvoir changer l'espace entre les deux derniers mots de chaque paragraphe dans un bloc de texte?
Merci
GeemeeTheway
J'ai déjà une fonction bien pratique qui remplace l'espace entre les deux derniers mots d'un paragraphe par "& n b s p ;" afin d'éviter d'avoir un mot orphelin sur une seule ligne. Ce n'est jamais beau un mot orphelin!
voici le code :
function anti_orphelins($TheParagraph)
{
if (substr_count($TheParagraph," ") > 1) {
$lastspace = strrpos($TheParagraph," ");
$TheParagraph = substr_replace($TheParagraph," ",$lastspace,1);
}
return $TheParagraph;
}
Mon problème aujourd'hui est le suivant, j'ai de gros bloc de textes dans une base de données qui contiennent plusieurs paragraphes par enregistrement. Quand je le passe dans cette fonction, il ne traite que le dernier paragraphe. C'est logique de la façon dont elle est écrite.
Comment puis-je modifier ma fonction afin de pouvoir changer l'espace entre les deux derniers mots de chaque paragraphe dans un bloc de texte?
Merci
GeemeeTheway
Configuration: Windows XP Firefox 3.0.7
3 réponses
-
ContributeurPuisque tu parles de paragraphes, je suppose que tu respectes la nomenclature html et utilises les balises <p></p> ?
Dans ce cas, pourquoi ne pas parser ton code, récupérer les chaines comprises entre <p></p>, qui deviennent alors $TheParagraph, et pour chacun des paragraphes, tu exécute ta fonction anti orphelin.
https://www.google.fr/search?q=php+text+between+string&gws_rd=ssl -
Contributeursalut,
il faut d'abord découper les paragraphes, les mettre dans un tableau et boucler pour appliquer ton nettoyage, en partant du principe que le retour chariot est codé avec la valeur du serveur :<?php function anti_orphelins($TheParagraph) { $paragraphs = explode(PHP_EOL, $TheParagraph); foreach($paragraphs as $key => $p) if(substr_count($p," ") > 1) { $lastspace = strrpos($p," "); $paragraphs[$key] = substr_replace($p," ",$lastspace,1); } return implode(PHP_EOL, $paragraphs); } ?>
si les balises <p> sont enregistrés dans la base, tu peux découper avec une expression régulière.
-
-
Contributeur@geemeethewaysi les balises <p> sont enregistrés dans la base, tu peux découper avec une expression régulière.
-
-
Contributeur
preg_match_all ( '\<p\>(.+)\<\/p\>', $TheParagraph, $paragraphs);
je suis pas sûr de l'échappement sur < et >.