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...
Le second code enleve les // dans les urls sans affecter les urls qui ont un protocole "http://" ou "http://s"
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);
?>