Nettoyer une chaine de caractère

WRInaute accro
Bonjour,

Je sais que la question est courante mais je ne trouve pas, faute de connaissance des mots-clés...

La question : comment "nettoyer" des chaines de caractères pour les insérer sans souci dans les URL ?

(Virer espaces, accents et autres).

Merci d'avance,

Michaël
 
WRInaute impliqué
Salut,

Ben moi j'ai recup cette fonction il y a un moment, et elle fonctionne correctement :

Code:
function viremerde($text) 
{
  // Définition du séparateur
  $separator = "-";

  $tofind = "àáâãäåòóôõöøèéêëçìíîïùúûüÿñ"; // Lettre accentuées
  $replac = "aaaaaaooooooeeeeciiiiuuuuyn"; // Equivalent non accentué

  // Mise en minuscule + suppression des lettres accentuées par leur équivalent non accentué
  $text = strtr(strtolower($text),$tofind,$replac);

  // Remplacement de caractère non alphanumérique par un séparateur
  $text = ereg_replace("[^a-z0-9.]", $separator, $text);

  // Suppression des doubles séparateurs
  while (strstr($text, $separator . $separator))
    $text = str_replace($separator . $separator, $separator, $text);

  // Suppression du 1er caracterere s'il est egal au separateur
	if (substr($text, 0, 1) == $separator)
		$text = substr($text, 1);

  // Retour avec suppression d’un possible séparateur en fin de chaîne
  return(ereg_replace($separator . "$", "", $text));
}
 
Nouveau WRInaute
Celle-ci gère plus d'accents :

Code:
function str2url($str)
	{
		if ($this->encoding == 'UTF-8') {
			$str = $this->removeEntities(utf8_decode($str));
		} else {
			$str = $this->removeEntities($str);
		}
		
		$str = strtr($str,
		"ÀÁÂÃÄÅàáâãäåÇçÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûü¾ÝÿýÑñ",
		"AAAAAAaaaaaaCcOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuYYyyNn");
		
		$str = str_replace('Æ','AE',$str);
		$str = str_replace('æ','ae',$str);
		$str = str_replace('¼','OE',$str);
		$str = str_replace('½','oe',$str);
		
		$str = preg_replace('/[^a-z0-9_\s\'\:\/\[\]-]/','',strtolower($str));
		
		$str = preg_replace('/[\s\'\:\/\[\]-]+/',' ',trim($str));
	
		$res = str_replace(' ','-',$str);
		
		return $res;
	}

Elle provient de DotClear :
https://svn.dotclear.net/1.0/trunk/inc/ ... s.blog.php
 
WRInaute passionné
("function viremerde" ;) :lol: )

J'utilise une fonction similaire à celle de bgdc mais j'ai ceci :
Code:
$title = strtr($title, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ -'/", "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn----");
$title = preg_replace('|\W|', '-', $title);

Le preg_replace est-il différent du ereg_replace("[^a-z0-9.] ? Lequel filtre le plus ?
 
WRInaute impliqué
yazerty a dit:
Le preg_replace est-il différent du ereg_replace("[^a-z0-9.] ? Lequel filtre le plus ?

je sais pas mais vaut mieux prendre l'habitude de coder en preg car ereg va disparaitre de php6...
 
WRInaute accro
Audiofeeline a dit:
Ca serait bien qu'ils ajoutent une fonction toute faite dans la prochaine version de PHP...

ta idée du jeu de carateres speciaux qu'il existe sur la terre ? ben les concepteurs php non plus...
 
WRInaute accro
Oui bien sur mais je parle des caractères de base déjà, ceux qui son sur ton clavier Européen ! ;)
Ce bout de code est utilisé régulièrement tout de même ?
M'enfin, c'était une idée comme ça...
 
WRInaute passionné
Audiofeeline a dit:
Ca serait bien qu'ils ajoutent une fonction toute faite dans la prochaine version de PHP...

Qu'est-ce que vous reprochez à rawurlencode?


TEST:

<?php

$str= "ÀÁÂÃÄÅàáâãäåÇçÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûü¾ÝÿýÑñ" .
"AAAAAAaaaaaaCcOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuYYyyNnƼ½";

$url = rawurlencode ( $str );

echo $url . "\n";

?>
 
WRInaute discret
Voila ce que j'utilise.
Ca vient de phpbb seo à la base, j'ai modifié un tout petit truc pour qu'il soit compatible pour moi ;)

Code:
function format_url( $url, $type = '' ){
	$url = preg_replace("`\[.*\]`U","",$url);
	$url = preg_replace('`&(amp;)?#?[a-z0-9]+;`i','-',$url);
	$url = htmlentities($url, ENT_COMPAT);
	$url = preg_replace( "`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);`i","\\1", $url );
	$url = preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-", $url);
	$url = ( $url == "" ) ? $type : strtolower(trim($url, '-'));
	return $url;
}
C'est propre et rapide :roll:
 
WRInaute passionné
KOogar a dit:
Jeviensderio a dit:
Audiofeeline a dit:
Ca serait bien qu'ils ajoutent une fonction toute faite dans la prochaine version de PHP...

Qu'est-ce que vous reprochez à rawurlencode?

ca => %C0%C1%C2%C3%C4%C5%E0%E1%E2%E3%E4%E5%

Je voulais tester, mais là du coup ça n'est plus très intéressant pour les urls...

mikaweb > ton code est quand même un peu plus complexe que celui dont on parle, non ? A moins qu'il ne gère autre chose ?
 
WRInaute accro
yazerty a dit:
Je voulais tester, mais là du coup ça n'est plus très intéressant pour les urls...

mikaweb > ton code est quand même un peu plus complexe que celui dont on parle, non ? A moins qu'il ne gère autre chose ?


On peut aussi urlencode.. on a pas vraiment avancé, puis ces fonctions sont surtout utiliser pour des formulaires avec la methode GET et tres peut pour des urls courantes..

le code de mikaweb fait ca :

avant:
C'est à propos de votre code de php
apres:
c-est-a-propos-de-votre-code-de-php
 
WRInaute passionné
Oki, donc ça fait la même chose que la ptite fonction que je me suis faite mais comme je ne maitrise pas les preg_replace je préfère garder la mienne (peut-être moins efficace en terme de performances serveur) :)...
 
Discussions similaires
Haut