robomatix a écrit :
Je voudrais créer une filtre pour remplacer le (...) engendrer par le filtre couper par ...
J'ai donc écrit la fonction suivante dans mon fichier mes_fonctions.php mais ça ne marche pas... Les parenthèse et les points étant utilisée pour les regexp... J'ai essayé de les échapper de différente manière, mais ça ne marche pas comme je le voudrais...
Est ce que quelqu'un à une idée de comment faire ?
Merci d'avance
<?php
function remplace_3_points($texte) {
$texte = (ereg_replace('(...)','...',$texte)); // Remplace(...) par ...
return $texte;
}
?>
attention à ne pas remplacer le (...) que l'auteur aurait mis dans le texte...
pouquoi pas simplement :
function remplace_3_points($texte) {
if (substr($texte,-5)=='(...)') return substr($texte,0,-5).'...';
return $texte;
}
mais il vaudrait mieux faire ton propre filtre couper amélioré :
function couper2($texte, $taille=50, $points = ' ...') {
$offset = 400 + 2*$taille;
if ( $offset<strlen($texte)
&& ($p_tag_ouvrant = strpos($texte,'<',$offset))!==NULL){
$p_tag_fermant = strpos($texte,'>',$offset);
if ($p_tag_fermant<$p_tag_ouvrant)
$offset += $p_tag_fermant; // prolonger la coupe jusqu'au tag fermant suivant eventuel
}
$texte = substr($texte, 0, $offset); /* eviter de travailler sur 10ko pour extraire 150 caracteres */
// on utilise les \r pour passer entre les gouttes
$texte = str_replace("\r\n", "\n", $texte);
$texte = str_replace("\r", "\n", $texte);
// sauts de ligne et paragraphes
$texte = ereg_replace("\n\n+", "\r", $texte);
$texte = ereg_replace("<(p|br)( [^>]*)?".">", "\r", $texte);
// supprimer les traits, lignes etc
$texte = ereg_replace("(^|\r|\n)(-[-#\*]*|_ )", "\r", $texte);
// supprimer les tags
$texte = supprimer_tags($texte);
$texte = trim(str_replace("\n"," ", $texte));
$texte .= "\n"; // marquer la fin
// travailler en accents charset
$texte = unicode2charset(html2unicode($texte, /* secure */ true));
$texte = nettoyer_raccourcis_typo($texte);
// corriger la longueur de coupe
// en fonction de la presence de caracteres utf
if ($GLOBALS['meta']['charset']=='utf-8'){
$long = charset2unicode($texte);
$long = spip_substr($long, 0, max($taille,1));
$nbcharutf = preg_match_all("/(&#[0-9]{3,5};)/S",$long,$matches);
$taille += $nbcharutf;
}
// couper au mot precedent
$long = spip_substr($texte, 0, max($taille-4,1));
$court = ereg_replace("([^[:space:]][[:space:]]+)[^[:space:]]*\n?$", "\\1", $long);
// trop court ? ne pas faire de (...)
if (spip_strlen($court) < max(0.75 * $taille,2)) {
$points = '';
$long = spip_substr($texte, 0, $taille);
$texte = ereg_replace("([^[:space:]][[:space:]]+)[^[:space:]]*$", "\\1", $long);
// encore trop court ? couper au caractere
if (spip_strlen($texte) < 0.75 * $taille)
$texte = $long;
} else
$texte = $court;
if (strpos($texte, "\n")) // la fin est encore la : c'est qu'on n'a pas de texte de suite
$points = '';
// remettre les paragraphes
$texte = ereg_replace("\r+", "\n\n", $texte);
// supprimer l'eventuelle entite finale mal coupee
$texte = preg_replace('/&#?[a-z0-9]*$/S', '', $texte);
return quote_amp(trim($texte)).$points;
}