Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je cherche actuellement une fonction qui serais bien sur utilisé dans zend mais dans le but d'optimiser une url (pour le référencement).
J'aimerais pouvoir utiliser le titre d'une news en adresse (juste pour l'utilité du référencement, aucunes utilité pour zend).
Exemple :
Titre de la news : Problème aérien, amerrissage réussi aux états-unis
Url utilisé : site.com/news/id/1/Probleme-aerien-amerrissage-reussi-aux-etats-unis/
En gros : une fonction qui modifie les caractères spéciaux inutilisable dans les adresse (les espaces, accents etc).
Merci
EDIT admin: merci de mettre des titres clairs
Dernière modification par Mr.MoOx (19-01-2009 09:48:46)
Hors ligne
Avec les fonctions ci-dessous, tu aura ton bonheur. Le lien ici est généré avec cette fonction : http://www.planete-asm.fr/breve/1660-cl … -club.html
//$url = urlize($titre);
function urlize($url) {
$search = array('/[^a-z0-9]/', '/--+/', '/^-+/', '/-+$/' );
$replace = array( '-', '-', '', '');
return preg_replace($search, $replace, Fonctions::utf2ascii($url));
}
function utf2ascii($string) {
$string = str_replace("â","a", $string);
$string = str_replace("à","a", $string);
$string = str_replace("ä","a", $string);
$string = str_replace("è","e", $string);
$string = str_replace("é","e", $string);
$string = str_replace("ë","e", $string);
$string = str_replace("ê","e", $string);
$string = str_replace("î","i", $string);
$string = str_replace("ï","i", $string);
$string = str_replace("ö","o", $string);
$string = str_replace("ô","o", $string);
$string = str_replace("û","u", $string);
$string = str_replace("ü","u", $string);
$string = str_replace("ù","u", $string);
$string = str_replace("Â","a", $string);
$string = str_replace("À","a", $string);
$string = str_replace("Ä","a", $string);
$string = str_replace("È","e", $string);
$string = str_replace("É","e", $string);
$string = str_replace("Ë","e", $string);
$string = str_replace("Ê","e", $string);
$string = str_replace("Î","i", $string);
$string = str_replace("Ï","i", $string);
$string = str_replace("Ö","o", $string);
$string = str_replace("Ô","o", $string);
$string = str_replace("Û","u", $string);
$string = str_replace("Ü","u", $string);
$string = str_replace("Ù","u", $string);
$string = str_replace("ç","c", $string);
$iso88591 = "\\xE0\\xE1\\xE2\\xE3\\xE4\\xE5\\xE6\\xE7";
$iso88591 .= "\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF";
$iso88591 .= "\\xF0\\xF1\\xF2\\xF3\\xF4\\xF5\\xF6\\xF7";
$iso88591 .= "\\xF8\\xF9\\xFA\\xFB\\xFC\\xFD\\xFE\\xFF";
$ascii = "aaaaaaaceeeeiiiidnooooooouuuuxyy";
return mb_strtolower(utf8_decode($string), 'ISO-8859-1');
}
Dernière modification par neojick (16-01-2009 22:19:44)
Hors ligne
Je pense qu'il est plus performant de faire 1 seul appel à str_replace() avec des array en paramètre
Hors ligne
Génial ! Merci ta fonction me mache le travail, je vais essayé de la ré-ecrire avec des array pour la reposté ici (si d'autres personnes ont besoins).
Merci bien
Hors ligne
Salut,
Je te file un morceau d'un de mes filtres, si ça peut te guider.
<?php Zend_Loader::loadClass('Zend_Filter_Interface'); /** * Classe de filtres sur les chaines de caractères * (url, transformation de chaines en images, remplacement * de valeur, etc.) * * @category Tight * @package Tight_Filter * @author Benjamin Dulau */ class Tight_Filter_StringUtil implements Zend_Filter_Interface { /** * Obligatoire Zend_Filter_Interface * * @param string $value * @return string */ public function filter($value) { } /** * Nettoie la chaine passée en paramètres. * Remplace les caractères accentués en non accentués, * passe la chaine en minuscule, remplace les espaces * par des tirets et supprime les caractères inutiles * * @param string $p_value * @param string $p_encoding * @return string $r_out */ public function clean($p_value, $p_encoding = null) { /* * Expression régulière permettant le changement des caractères accentués en * caractères non accentués. */ $search = array ('@[éèêëÊË]@i','@[àâäÂÄ]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i', '@[ç]@i','@[^a-zA-Z0-9]@'); $replace = array ('e','a','i','u','o','c',' '); $r_out = preg_replace($search, $replace, $p_value); /* * Passe tout en minuscule */ Zend_loader::loadClass('Zend_Filter_StringToLower'); $z_filter = new Zend_Filter_StringToLower(); $z_filter->setEncoding($p_encoding); $r_out = $z_filter->filter($r_out); /* * Remplace les espaces par des tirets */ $r_out = str_replace(" ",'-',$r_out); /* * Supprime tous les caractères inutiles */ $r_out = preg_replace('#\-+#','-',$r_out); $r_out = preg_replace('#([-]+)#','-',$r_out); /* * Remplace les espaces restants par des tirets */ Zend_Filter::get($r_out, 'StringTrim', array('-')); return $r_out; } }
A+ benjamin
Hors ligne
J'ai un petit soucis encore relatif aux url...
Quand je veux faire un lien de retour à l'accueil ou à une autre page, il garde les autres données dans l'url (titre, id etc ..)
Ex :
<?php echo $this->url(array('controller'=>'actu',
'action'=>'supprimer', 'id'=>$actu->news_id));?>
Si la page était : site.com/news/id/1/LoL-le-titre
Le lien sera : site.com/actu/supprimer/1/LoL-le-titre (en gros le titre à été concervé, ainsi que l'id).
J'aimerais que ces infos ne soit pas transféré en get dans l'url, comment faire pour "reset" les informations déjà obtenu?
Mercii
Hors ligne
Bonsoir,
Cette question est décidément très redondante
http://www.z-f.fr/forum/viewtopic.php?id=1663
A+ benjamin.
Hors ligne
Hello,
@Delprog : je crois que nous ne sommes pas autorisés à dire RTFM sur ce forum mais parfois ça démange
A+
Hors ligne