Nettoyage d'une URl

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Nettoyage d'une URl

par BaLiSTiK » 13 mars 2009, 10:28

j ai appliqué le trim avec le tiret en parametre, ça à l air OK
Merci bien.

Je redeterrerrai le topic au cas ou ^^

par blof » 09 mars 2009, 20:42

Dans le cas ou je me retrouve avec un -- en fin de chaine, dans ce cas là, mieux vaut-il aps placer le trim($var,'-'); dans le while ?
Il faut essayer ... ( ça mord pas ) :wink:
<?php

$chaine = '-------blabla-----------------------------------------------------------';

echo trim($chaine, '-');

?>

par blof » 09 mars 2009, 20:27

BaLiSTiK, je vois que tu n'aimes pas ma solution :(
Je retente quand même ...

Tu n'as pas besoin de boucle while :
( j'ai fait afficher les différentes étapes )
<?php

$intQuest = " BaLiSTiK -> Tu n'as PÔ besoin de boucle while !!!  ----------------------";
echo $intQuest,'<br>';

$urlQuest = strtolower($intQuest);
echo $urlQuest,'<br>';

$urlQuest = strtr($urlQuest, 'àáâãäå@çèéêëìíîïðòóôõöùúûüýÿ', 'aaaaaaaceeeeiiiioooooouuuuyy');
echo $urlQuest,'<br>';

$urlQuest = preg_replace('/\W+/', '-', $urlQuest);
echo $urlQuest,'<br>';

$urlQuest = trim($urlQuest, '-');
echo $urlQuest,'<br>';

$urlQuest = $urlQuest . '.html';
echo $urlQuest,'<br>';

?>

par BaLiSTiK » 09 mars 2009, 15:53

Au temps pour moi ^^. Dans le cas ou je me retrouve avec un -- en fin de chaine, dans ce cas là, mieux vaut-il aps placer le trim($var,'-'); dans le while ?

par jojolapine » 09 mars 2009, 15:45

trim enlève uniquement les espaces en début et fin de chaines,.
Hum hum... faut!
http://fr.php.net/manual/fr/function.trim.php
Quel est le deuxième argumetn de trim?

par BaLiSTiK » 09 mars 2009, 15:03

C était à titre d exemple pour illustrer le fait que si une chaine de caractère se finit par un simple tiret, en y appliquant un trim() celà ne changeait rien. trim enlève uniquement les espaces en début et fin de chaines, d ou ma boucle while :). On a du mal se comprendre ^^.
Pour l instant cette solution fonctionne donc je n'y touches pas, (voir ptete y revenir apres) mais ce qui m'importe c est effacer tout ce qui est double tiret ou plus.

par blof » 09 mars 2009, 14:04

$var = ' balblala - ';
echo trim($var); 
affiche : balblala -
Je n'ai jamais écrit un tel code.

Je te propose de relire mon code et surtout de le tester.

Je ne demande pas ce que tu crois que ça pourrait éventuellement donner.
Je te demande ce que tu vois à l'écran.

Est-ce qu'il y a un "-" à la fin ?

par BaLiSTiK » 09 mars 2009, 13:54

$var = ' balblala - ';
echo trim($var); 
affiche : balblala -

Je vais tenter avec le W+, je dirai si ça fonctionne :).
Thx

par blof » 09 mars 2009, 13:48

C est vrai que je n avais aps pensé au trim() pour enlever les espaces à la fin, mais il restera quand même un bla-bla-.html
Non.
As-tu essayé ?
( Voir le manuel )
Mais pour la regexp, le W+ correspond à quoi stp ?
\W représente tout caractère qui n'est pas un caractère de "mot"
( Voir le manuel )

par BaLiSTiK » 09 mars 2009, 13:41

C est vrai que je n avais aps pensé au trim() pour enlever les espaces à la fin, mais il restera quand même un bla-bla-.html : d'ou ma boucle while et la recursivité .
Mais pour la regexp, le W+ correspond à quoi stp :) ?

par blof » 09 mars 2009, 13:39

Bonjour,

une autre solution :
<?php
$urlQuest = ' Pourquoi çA fE  2 D a ? ';

$urlQuest = strtolower($urlQuest);
$urlQuest = strtr($urlQuest, 'àáâãäå@çèéêëìíîïðòóôõöùúûüýÿ', 'aaaaaaaceeeeiiiioooooouuuuyy');
$urlQuest = preg_replace('/\W+/', '-', $urlQuest);
$urlQuest = trim($urlQuest, '-').'.html';

echo $urlQuest;
?>

par BaLiSTiK » 09 mars 2009, 12:13

J ai appliqué ton tableau de remplacement mais il y a un point sur lequel j ai de nouveau un soucis, c est en cas de double tiret ou plus.
J ai pensé à faire une regexp qui en cas de double tiret remplace par un simple, en utilisant preg_replace mais ça n a pas l air de fonctionner (je suis une quiche en regexp ^^)
		$pattern = '/^([-]*)$/'; //en cas de -*
		while(preg_match($pattern,$urlQuest)){
			$urlQuest = preg_replace($pattern,'-',$urlQuest);
			self::_creationURL($urlQuest);
		}

par Aureusms » 25 févr. 2009, 15:59

Bonjour BaLiSTiK,

Que penses tu de cette optimisation ?
static function _creationURL($intQuest){
        
        //Mise en minuscule de l intitule de la question
        $urlQuest = strtolower($intQuest);
        //Remplacement des caracteres speciaux
        $urlQuest = strtr($urlQuest, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäå@çèéêëìíîïðòóôõöùúûüýÿ+!?', 'aaaaaaceeeeiiiiooooouuuuyaaaaaaaceeeeiiiioooooouuuuyy---');



       //ICI
        //Enlevement des espaces, des " et ' remplacés par des -
        $table_un = array (" ",'"',"---");
        $table_remplacement = array ("-",'',"-");
        $urlQuest = str_replace($table_un,$table_remplacement,$urlQuest);

        
        //ET ICI
        //Si le dernier caractere de la chaine est un -, on l enleve
        //echo '<br />la chaine avant enlevement du dernier caractere : '.$urlQuest.'| Fin<br />';
        while(strrpos ($urlQuest,"-") == strlen($urlQuest)){
            $urlQuest = substr($urlQuest,0,-1);
            self::_creationURL($urlQuest); //Recursivité tant que la fin de l url a un -
        }
        return $urlQuest.'.html';
    }//fin methode 

Nettoyage d'une URl

par BaLiSTiK » 25 févr. 2009, 12:28

Salutations amis phpistes ^^.

Je développe une méthode pour transformer une chaine de caractères en url de type ma-chaine-de-caractere-transforme.html.
Par contre, il m arrive d avoir un - ou -- en fin de chaine (juste avant le .html) et j ai quelque soucis à l enlever.
EDIT : En modifiant la methode, j ai presque resolu mon soucis. Mais il reste un - en cas de recursivité

Methode :
class test{

/** autre methodes **/
	function _creationURL($intQuest){
		
		//Mise en minuscule de l intitule de la question
		$urlQuest = strtolower($intQuest);
		//Remplacement des caracteres speciaux
		$urlQuest = strtr($urlQuest, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäå@çèéêëìíîïðòóôõöùúûüýÿ+!?', 'aaaaaaceeeeiiiiooooouuuuyaaaaaaaceeeeiiiioooooouuuuyy---');
		//Enlevement des espaces, des " et ' remplacés par des -
		$urlQuest = str_replace(" ","-",$urlQuest);
		$urlQuest = str_replace('"','',$urlQuest);
		//En cas de ---
		$urlQuest = str_replace("---","-",$urlQuest);
		
		//Si le dernier caractere de la chaine est un -, on l enleve
		echo '<br />la chaine avant enlevement du dernier caractere : '.$urlQuest.'| Fin<br />';
		if(substr($urlQuest,strlen($urlQuest)-1,strlen($urlQuest)) == "-"){
			$urlQuest = substr($urlQuest,0,strlen($urlQuest)-1);
			self::_creationURL($urlQuest); //Recursivité tant que la fin de l url a un -
			$urlQuest = $urlQuest.'.html';
		}else{
		//rajout de .html à la fin
			$urlQuest = $urlQuest.'.html';
		}
		echo '<br />URL finale : '.$urlQuest;
		return $urlQuest;
	}

}
$otest = new test();
$q = 'Pourquoi A fE D a ?';
echo 'Question : '.$q.'<br /><br />';
$otest->_creationURL($q);
et ça affiche :
Question : Pourquoi A fE D a ?

la chaine avant enlevement du dernier caractere : pourquoi-a-fe-d-a--| Fin

la chaine avant enlevement du dernier caractere : pourquoi-a-fe-d-a-| Fin

la chaine avant enlevement du dernier caractere : pourquoi-a-fe-d-a| Fin

URL finale : pourquoi-a-fe-d-a.html
URL finale : pourquoi-a-fe-d-a.html
URL finale : pourquoi-a-fe-d-a-.html
Je sais que c est un ptit truc à la con mais je le trouve pas ^^. Merci d avance

EDIT :
Au final j ai reussi :).

	static function _creationURL($intQuest){
		
		//Mise en minuscule de l intitule de la question
		$urlQuest = strtolower($intQuest);
		//Remplacement des caracteres speciaux
		$urlQuest = strtr($urlQuest, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäå@çèéêëìíîïðòóôõöùúûüýÿ+!?', 'aaaaaaceeeeiiiiooooouuuuyaaaaaaaceeeeiiiioooooouuuuyy---');
		//Enlevement des espaces, des " et ' remplacés par des -
		$urlQuest = str_replace(" ","-",$urlQuest);
		$urlQuest = str_replace('"','',$urlQuest);
		//En cas de ---
		$urlQuest = str_replace("---","-",$urlQuest);
		
		//Si le dernier caractere de la chaine est un -, on l enleve
		//echo '<br />la chaine avant enlevement du dernier caractere : '.$urlQuest.'| Fin<br />';
		while(substr($urlQuest,strlen($urlQuest)-1,strlen($urlQuest)) == "-"){
			$urlQuest = substr($urlQuest,0,strlen($urlQuest)-1);
			self::_creationURL($urlQuest); //Recursivité tant que la fin de l url a un -
		}
		return $urlQuest.'.html';
	}//fin methode