Général
- Présentation
- Les Symboles
- Les Métacaractères
- Les Ancres et Classes
- Les options
- Constantes prédéfinies
- Equivalences
- Créer un motif
- Les POSIX
- Les PCRE
- Les Plus des PCRE
- Les Assertions Part I
- Les Assertions Part II
- Motif conditionnel
- Mysql et les regex
- Url Rewriting
- Optimisation
- Aide mémoire
Les PCRE
Les POSIX
Pratique
Spécial php
- Conseils et Astuces
- Délimiteur PCRE
- Créer une bdd
- Utiliser du BBcode
- Le binaire
- Faire un panier
- Cases à cocher
- Citations imbriquées
- Colorateur syntaxique
- Les list-box ou combo-box
- Faire un diaporama
- Isset ou empty ?
- Une légende au survol
- Site en plusieurs langues
- Requêtes dynamiques
- Gestion des smiley
- Faire un moteur de template
- Timestamp php/mysql
- Timestamp mysql
- Matcher une adresse email
- Controler des données
Les billets de fred
- Les POSIX... mise en pratique !
- Limiter l'accès à un répertoire
- Alternance de couleurs
- Magic_quotes
- Désactiver les short_tags
- Require ou include : Bench
- Cohérence dans les chaines de caractères
- "echo" : lapin ou tortue ?
- Gérer un formulaire avec plusieurs boutons
- Le formulaire a t'il été soumis ?
- J'ai décidé de grossir
- La guerre des étoiles
- La guerre des boutons
- Headers already sent
- IP, IP, IP, houra !
- Créer un itérateur avec PHP5
- On vous conduit vers la lumière
- Comment utiliser MySQL avec PHP
- Non aux booléens !
- Php.ini : dist /recommended
- Include : gouffre ou fêlure ?
- Simple comme les sessions !
- Simplifier le traitement des erreurs
- Structurez vos applications
- Franchement, t'es trop for !
- Notice: Undefined variable (ou index)
- Proscrire les variables auto déclarées
Cette portion vous permettra de rendre les URLs et les adresses mails cliquables dans vos textes, en utilisant preg_replace() et les tableaux.
// le texte ou l on va rendre les email et les urls cliquables
$texte = 'debut du texte http://expreg.com suite info@expreg.com encore
du texte https://europeancards.com fin';
$in = array(
'`((?:https?|ftp)://\\S+)(\\s|\\z)`',
'`([[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-_.]?[[:alnum:]])*\.([a-z]{2,4}))`'
);
$out = array(
'<a href="$1">$1</a>$2',
'<a href="mailto:$1">$1</a>'
);
echo preg_replace($in, $out, $texte);
?>
Petite fonction permettant de rendre cliquable une ou plusieurs url placées dans un texte. Accepte des urls du type : http://www.unsite.com https://www.monsite.com ftp://www.monsite.org ainsi que toutes les extensions à 2 ou 4 lettres Utilise la fonction preg_replace
function urlclick($url){
$url=preg_replace('`(((https?|ftp)://(w{3}\.)?)(?<!www)(\w+-?)*\.([a-z]{2,4}))`',
'<a href="$1" target="_blank">$1</a>',$url);
return $url;
}
echo urlclick($texte);
?>
Fonction permettant de rendre cliquable une ou plusieurs url placées dans un texte. Accepte dans du texte, des urls du type : http://www.unsite.com https://www.monsite.com ftp://www.monsite.org et aussi www.monsite.org ainsi que toutes les extensions à 2 ou 4 lettres. Accepte également une chaine contenant une url seule Utilise la fonction preg_replace et un tableau.
function clicklien($url){
$in=array(
'`(((https?|ftp)://(www\.)?[^www][[:alnum:]_.-]+)\.([a-z]{2,4}))`',
'`\s?(?<!//)(www\.)([[:alnum:]_.-]+)\.([a-z]{2,4})\s?\W?`');
$out=array(
'<a href="$1" target="_blank">$1</a>',
'<a href="http://$1" target="_blank">$1</a>');
return preg_replace($in,$out,$url);
}
echo clicklien($texte);
?>
Identique à la V2, mais celle-çi prend en compte n'importe quel type d'url www.unsite.com http://unsite.com http://www.unsite.com http://www.expreg.com/liresource.php?type=URL bref, toutes URL se trouvant dans un texte.
function clicklien($url){
$in=array(
'`(((?:https?|ftp)://\S+)(\s|\z)`',
'`((?<!//)(www\.)\S+)(\s|\z)`');
$out=array(
'<a href="$1" target="_blank">$1</a> ',
' <a href="http://$1" target="_blank">$1</a> ');
return preg_replace($in,$out,$url);
}
echo clicklien($texte);
?>
Rendre simplement les urls placées entre < et > cliquables dans vos textes.
$motif='`<([^>].*)>`';
$sortie='<a href="$1" target="_blank">$1</a>';
$texte=preg_replace($motif,$sortie,$texte);
?>
Petite regex qui permet de supprimer l'action des liens dans des pages chargées sur le net.
$motif='`<a[^>]+?>(.*?)</a>`';
$sortie='$1';
$texte=preg_replace($motif,$sortie,$texte);
?>
Petite regex permettant de créer des liens au départ de balises perso.
$chaine="Test d'une url placée entre des balises perso style [ url ] et [ /url ]
[url]https://www.site1.com[/url] suivie de [url]http://www.site2.com[/url]
et autres balises [url]http://www.site3.com[/url].";
$motif='`\[url](.*?)\[/url]`si';
$sortie='<a href="$1" target="_blank">$1</a>';
echo preg_replace($motif,$sortie,$chaine);
?>
Cette regex est une version améliorée de la regex de Yves Maistriaux ce qu'il y a de nouveau c'est que vous pouvez mettre un nom à votre lien au lieu que ce soit par exemple : www.expreg.com C'est à dire que vous mettrez : [url=www.url.com]le nom de l'url[/url]
$chaine="[url=http://www.expreg.com]Le site pour apprendre les expressions
réguliéres ![/url]";
$motif='`\[url=(.*?)](.*?)\[/url]`si';
$sortie='<a href="$1" target="_blank">$2</a>';
echo preg_replace($motif,$sortie,$chaine);
?>
Avant de découvrir la fonction php parse_url, j'ai fait cette fonction qui lui ressemble tout en étant moins complète, et en me basant sur une expression régulière déjà existante dans la classe HTTP ( http://pear.php.net/package/HTTP ) de pear distribué sous la version 3 de la PHP license : '`^(([a-z0-9]+)://[^/:]+)(:[\d]+)?`i' La fonction cut_url a donc un argument, une chaine de caractère (une url) et retourne un tableau de ce type : Array ( [0] => url [1] => protocole [2] => nom de domaine [3] => port [4] => chemin )
$url = "http://www.jeuxvideo.com:80/test/forums.htm";
function cut_url($url)
{
preg_match('`^([a-z0-9]+://)?([^/:]+)(:[\d]+)?(/.*$)?`i', $url, $out);
return $out;
}
print_r(cut_url($url));
/* affichera
Array
(
[0] => http://www.jeuxvideo.com:80/test/forums.htm
[1] => http://
[2] => www.jeuxvideo.com
[3] => :80
[4] => /test/forums.htm
)
*/
?>
Reconnait tout type d'adresses : http://xxxx https://xxxx http://www.site.com/page.php?id=2&cat=3#ancre3 www.site.com www.site.com/page.php?id=2&cat=3#ancre3 ftp://login:pwd@ftp.site.com email@site.com Si l'adresse est trop longue, elle est raccourcie. Ex: http://www.site.com/index.php?img=1&date=2005-05-16&per=1&sdid=4#ancre4 devient http://www.site.com/inde...sdid=4#ancre4 Fonction principale à placer dans le code : make_clickable
function make_clickable($text)
{
// Les 3 regexp suivant sont issus des forum phpBB
$ret = ' ' . $text;
$ret = preg_replace_callback("!(^|[\n ])(https?://[^ \"\n\r\t<]*)!is", "regexp_http", $ret);
$ret = preg_replace_callback("!(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)!is", "regexp_http", $ret);
$ret = preg_replace_callback("!(^|[\n ])([a-z0-9&\-_.\S]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)!i", "regexp_mail", $ret);
$ret = substr($ret, 1);
return($ret);
}
function shorten($value, $length = 50)
{
if (strlen($value) > $length)
return substr($value , 0, 35 ) . '...' . substr($value , -15);
else
return $value;
}
function regexp_http($value, $http = '', $end = '')
{
if (!preg_match("!^http!", $value[2]))
$http = 'http://';
if (preg_match("!([\.,\?\!]+)$!", $value[2], $match))
{
$end = $match[1];
$value[2] = preg_replace("!([\.,\?\!]+)$!", "", $value[2]);
}
return $value[1] . '<a href="' . $http . $value[2] . '" target="_blank">' . shorten($value[2]) . '</a>' . $end;
}
function regexp_mail($value, $end = '')
{
if (preg_match("!([\.,\?\!]+)$!", $value[2], $match))
{
$end = $match[1];
$value[2] = preg_replace("!([\.,\?\!]+)$!", "", $value[2]);
}
return $value[1] . '<a href="mailto:' . $value[2] . '@' . $value[3] . '">' . shorten($value[2] . '@' . $value[3]) . '</a>' . $end;
}
?>
Une petite fonction pour appliquer la césure sur des url à rallonge placée dans un texte. Peut être facilement modifiée pour être utilisée avec ce satané bbcode. Peut également être améliorée en fonction de vos besoins spécifiques.
$texte = 'Et voici un lien dans une page
<http://www.expreg.com/index.php?argument1=un>
auquel on va appliquer une césure';
function cesure_lien($match) {
return '<a href="'.$match[1].'" target="_blank">'.substr($match[1],0,15).'...</a>';
}
$motif='`<((https?|ftp)://\S+)>`';
echo preg_replace_callback($motif,'cesure_lien',$texte);
// affichera : http://www.expr...
?>
Pour être utilisée avec un bbcode par exemple, le motif pourrait être :
$motif='`\[url]([^[]+)\[/url]`';
Cette dernière version tient compte de tous les types d'url placées au travers d'un texte, comme un forum ou livre d'or. - Urls avec leurs protocoles respectifs - Urls sans protocoles avec le www. - Urls dynamiques avec ou sans protocole Les regex tiennent compte des éventuels caractères de ponctuation qui pourraient être placés directement à la suite de l'url afin de ne pas les matcher.
$texte = 'Bonjour ou bonsoir à toutes et tous,
Vous souhaitez rendre cliquable une ou des urls placées au
travers de vos textes comme celle-ci www.monsite.com.
Vous pourrez également matcher des urls avec leurs
protocoles respectifs à savoir http://www.monsite.com/mondossier/mapage.html ou
ftp://monsite.com, par exemple, ainsi que les url dynamique telle que
http://site.com/regex/page.php?truc=montruc&machin=lemachin et aussi
www.site.com/clicurl.php?truc=montruc&machin=lemachin et www.google.fr';
function clicklien($url){
$in=array(
'`((?:https?|ftp)://\S+[[:alnum:]]/?)`si',
'`((?<!//)(www\.\S+[[:alnum:]]/?))`si'
);
$out=array(
'<a href="$1">$1</a>',
'<a href="http://$1">$1</a>'
);
return preg_replace($in,$out,$url);
}
echo clicklien($texte);
?>
