Scritp url rewrting incomplet

WRInaute passionné
bonjour

voila j'ai ce script que j'utilise depuis pas mal de temps (fait maison en partit) :

$var1 = $data['title']; //la variable title contien le texte a rewrité en url
$var1 = strtr($var1,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ@°",
"aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynnao");

$var1 = strtr($var1,"()[]~$%*!?,:/^¨{}|+-¢¥©˜£µ§.#","----------------------------");

$var1 = preg_replace("/¤/i", "euros", $var1);
$var1 = preg_replace("/'/i", "-", $var1);
$var1 = preg_replace("/"/i", "", $var1);
$var1 = preg_replace("/ /i", "-", $var1);
$var1 = ereg_replace("[-]{2,}", "-", $var1);
$var1 = strtolower($var1);

Voila mais magré tous ,certain caractéres comme le ' et ! notement (apostrophes et exlamation) son toujours présents dans le lien !!!

le reste c'est impec !!!

le plus dramatique est que sous spider-simulator.com il me CASSE le lien avec un & aux caracteres non convetionel de l'url (ceux cité ci dessus, j'imagine que google vois pareil) et supprime le reste de l'url après ce &..

merci pour toutes suggestions.
 
WRInaute passionné
Salut,

Dans dotclear il y a un bon script qui transforme une chaine en url "propre" par contre c'est en javascript, tu peux facilement le transformer en PHP :

Code:
function str2url(str,encoding,ucfirst)
{
	str = str.toUpperCase();
	str = str.toLowerCase();
	
	str = str.replace(/[\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5]/g,'a');
	str = str.replace(/[\u00E7]/g,'c');
	str = str.replace(/[\u00E8\u00E9\u00EA\u00EB]/g,'e');
	str = str.replace(/[\u00EC\u00ED\u00EE\u00EF]/g,'i');
	str = str.replace(/[\u00F2\u00F3\u00F4\u00F5\u00F6\u00F8]/g,'o');
	str = str.replace(/[\u00F9\u00FA\u00FB\u00FC]/g,'u');
	str = str.replace(/[\u00FD\u00FF]/g,'y');
	str = str.replace(/[\u00F1]/g,'n');
	str = str.replace(/[\u0153]/g,'oe');
	str = str.replace(/[\u00E6]/g,'ae');
	str = str.replace(/[\u00DF]/g,'ss');
	
	str = str.replace(/[^a-z0-9_\s\'\:\/\[\]-]/g,'');
	str = trim(str);
	str = str.replace(/[\s\'\:\/\[\]-]+/g,' ');
	str = str.replace(/[ ]/g,'-');
	
	if (ucfirst == 1) {
		c = str.charAt(0);
		str = c.toUpperCase()+str.slice(1);
	}
	
	return str;
}
 
WRInaute passionné
en javascript... oops

bon be je sais pas, sinon aucuen idée du probleme dans mon code a 1er vus ?? :(
 
WRInaute impliqué
si non y'a celle là aussi qui est pas mal et très complète, mais tu aura peut être pas besoin de tout (genres les lignes consacré aux images avec les img ou le truc du most rescent topic block avec les <b>) :


Code:
function make_url_friendly($url)
{

	$url = trim($url);

	$url = strtolower($url);

	// Fix for most recent topics block
	// or else a b is shown in every url
	$find = array('<b>',
		'</b>');
	$url = str_replace ($find, '', $url);

	$url = preg_replace('/<(\/{0,1})img(.*?)(\/{0,1})\>/', 'image', $url);

	$find = array(' ',
		'&quot;',
		'&',
		'\r\n',
		'\n',
		'/',
		'\\',
		'+',
		'<',
		'>');
	$url = str_replace ($find, '-', $url);

	$find = array('é',
		'è',
		'ë',
		'ê',
		'É',
		'È',
		'Ë',
		'Ê');
	$url = str_replace ($find, 'e', $url);

	$find = array('í',
		'ì',
		'î',
		'ï',
		'Í',
		'Ì',
		'Î',
		'Ï');
	$url = str_replace ($find, 'i', $url);

	$find = array('ó',
		'ò',
		'ô',
		'Ó',
		'Ò',
		'Ô');
	$url = str_replace ($find, 'o', $url);

	$find = array('ö',
		 'Ö');
	$url = str_replace ($find, 'oe', $url);

	$find = array('á',
		'à',
		'â',
		'Á',
		'À',
		'Â');
	$url = str_replace ($find, 'a', $url);

	$find = array('ä',
		 'Ä');
	$url = str_replace ($find, 'ae', $url);

	$find = array('ú',
		'ù',
		'û',
		'Ú',
		'Ù',
		'Û');
	$url = str_replace ($find, 'u', $url);

	$find = array('ü',
		 'Ü');
	$url = str_replace ($find, 'ue', $url);

	$find = array('ß');
	$url = str_replace ($find, 'ss', $url);

	$find = array('ç');
	$url = str_replace ($find, 'c', $url);

	$find = array('/[^a-z0-9\-<>]/',
		'/[\-]+/',
		'/<[^>]*>/');

	$repl = array('',
		'-',
		'');

	$url =  preg_replace ($find, $repl, $url);

	$url = str_replace ('--', '-', $url);

	return $url;

}

De plsu tu peut facilement ajouter des condition supplémentaires ...

++
 
WRInaute passionné
merci mais comment on fait un appel de fonction en php ?

de plus je ne vois pas de filtre pour les ! notement
 
WRInaute passionné
Pour faire appelle à cette fonction il te suffira de mettre :

<?php
make_url_friendly("Ta chaine de caractère");
?>
 
Discussions similaires
Haut