Fonctions spéciales annuairistes

WRInaute accro
Bonjour,

je voulais partager 2 fonctions spéciale annuaire, la premiere corrige la ponctuation d'une description et la seconde c'est une stipslashe spéciale url

voici ce que fait la correction de ponctuation:

- met un espace après un point, une points virgule... et une majuscule au mot qui suit le point
- met une espace après une virgule
- met une majucule au début du texte
- enleve les espaces en début et fin de chaine

Les +++

- n'affecte pas les 3 ou série de 2 points (...)
- n'affecte pas les smileys
- n'affecte pas les série de signes ?!?!?
- n'affecte pas les cotes simples et doubles ' et "
- n'affecte pas le HTML
- n'affecte pas les URLs (car la correction n'est pas lancé)
- n'affecte pas les adresses emails (car la correction n'est pas lancé)
- n'affecte pas les N° de tél : 01.04.01...
- n'affecte pas les nombres 0.10...


Code:
<?php
function corrige_ponctuation($chaine) {

/*****************************************************************************/
/* initialisation                                                            */
/*****************************************************************************/


  $signes = array(".","!","?",",",":",";");
  $signes_connexe = array('"',")",">","'");
  $i=0;
  $taille_chaine = strlen( $chaine );

  $masque_url  = '#';
  $masque_url .= '([http|ftp|https]+://';
  $masque_url .= '[www\.]?';
  $masque_url .= '[\.\-a-zA-Z0-9]*';
  $masque_url .= '[a-zA-Z]{2,4}?';
  $masque_url .= '[\?/\=\&\-_.a-zA-Z0-9]+?';
  // si vous avez + de repertoires a analyser, ajouter + de lignes
  // comme la ligne modele ci dessous :
  $masque_url .= '[\?/\=\&\-_.a-zA-Z0-9]+?';
  // fin ligne modele
  $masque_url .= '[\?/\=\&\-_.a-zA-Z0-9]+)';
  $masque_url .= '#i';
  // FIN MASQUE

  $masque_email  = '#';
  $masque_email .= "[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*";
  $masque_email .= "@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})+";
  $masque_email .= '#';

/*****************************************************************************/
/* Si 1 url ou 1 adresse email est dans le texte, la correction est arreter  */
/*****************************************************************************/

if (!preg_match_all($masque_url,$chaine,$match_1) and
    !preg_match_all($masque_email,$chaine,$match_2)
   )
 {
/*****************************************************************************/
/* debut de la correction                                                    */
/*****************************************************************************/

  while ( $i < $taille_chaine )
    {
    // met la premiere lettre du texte en majuscule
    if ($i==0) $chaine[$i] = strtoupper($chaine[$i]);
    // capture la chaine deja analysée
    $capture .= $chaine[$i];


/*****************************************************************************/
/* correction de la ponctuation                                              */
/*****************************************************************************/

      // si le caractere fait partie des signes
      // si le caractere suivant n'est pas un espace
      // si le caractere suivant n'est pas un numérique
      // si le caractere précedent n'est pas un numérique
      // si on n'est pas en fin de chaine
      // n'affecte pas les 3 ou série de 2 points (...)
      // n'affecte pas les smileys ;) ou :)
      // n'affecte pas les série de signes ?!?!?
      // n'affecte pas les guillemets simples et doubles ' et "

      if( in_array($chaine[$i],$signes )
               and $chaine[$i+1] != ' '
               and !is_numeric( $chaine[$i+1] )
               and !is_numeric( $chaine[$i-1] )
               and ($chaine[$i+1] < $taille_chaine)
               and ($chaine[$i+1] != '.')
               and ($chaine[$i+1] != in_array($chaine[$i+1],$signes ))
               and ($chaine[$i+1] != in_array($chaine[$i+1],$signes_connexe ))
                                       )
       {
        $capture_trans = $capture.' ';
        // insere le point + 1 espace
        $chaine = str_replace( $capture, $capture_trans, $chaine );

        // met la lettre en majuscule si on ne traite pas une virgule
        if($chaine[$i] != ',')
        $chaine[$i+2] = strtoupper($chaine[$i+2]);
       }

/*****************************************************************************/
/* met une majuscule apres un signe                                          */
/*****************************************************************************/
     if (in_array($chaine[$i],$signes ) and ($chaine[$i+1] == ' ')
                                        and ($chaine[$i] != ',') )
      $chaine[$i+2] = strtoupper($chaine[$i+2]);

      $i++;
    }
    return trim($chaine);
   }
  }
/*****************************************************************************/
/* test                                                                      */
/*****************************************************************************/

// pour l'utiliser : 

   echo corrige_ponctuation($texte);


?>


Le second code enleve les // dans les urls sans affecter les urls qui ont un protocole "http://" ou "http://s"

Code:
<?php
$url = 'http://www.site-exemple.com//rep1///rep2/';

function Strip_Slashes_Url($url) {

  $masque = array( '///', '//');
  $replace = array( '/', '/');
  if (substr($url,0,7) == "http://")
  $url = 'http://'.str_replace($masque,$replace,substr($url,7,strlen($url)));
  elseif (substr($url,0,8) == "https://")
  $url = 'https://'.str_replace($masque,$replace,substr($url,8,strlen($url)));
  else $url = str_replace($masque,$replace,$url);
  return $url;

}

// http://www.site-exemple.com/rep1/rep2/
echo Strip_Slashes_Url($url);

?>
 
WRInaute impliqué
étant donné qu'on en est à : relire, corriger les fautes d'orthographes, de syntaxe, voir même de réécrire les descriptions, alors quand il n'y a que les espaces oubliés je suis content.
 
Discussions similaires
Haut