Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/08/2011, 11h22   #1
Membre à l'essai
 
Homme F. Mithieux
Étudiant
Inscription : juin 2008
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme F. Mithieux
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 99
Points : 20
Points : 20
Par défaut Empêcher publication de lien

Bonjour à tous,
Je vous écrit aujourd'hui parce que je suis face à un petit problème .

En gros, je suis en pleine construction d'un site qui contiendra un sorte de blog. Des utilisateurs non-enregistrés auront l'occasion de poster des réponses, MAIS, mon chef veut qu'aucun liens publiés dans ces réponses ne pointent sur d'autres sites..

Il faut aussi savoir que j'utilise CKeditor, donc, par exemple, si l'on copie le contenu d'un site comme wikipedia et qu'on le colle dans l'éditeur, les liens sont automatiquement créés et se retrouvent dans la BDD sous forme de <a href bien évidement.

Donc, j'ai tenté une modification de ce genre:
Code :
1
2
$texte = preg_replace("#href=\"|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i\"#", "href='#'", $texte);
$texte = preg_replace("#href='|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i'#", "href='#'", $texte);
Mais, étrangement, cela marche en local, mais pas sur internet ...

Je remercie d'avance toute personne qui pourra m'aider
Arget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 11h49   #2
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Citation:
Envoyé par Arget Voir le message
Mais, étrangement, cela marche en local, mais pas sur internet ...

Je remercie d'avance toute personne qui pourra m'aider
Hmm il n y a pas des raisons que ça ne puisse pas marcher à moins d'avoir compiler PHP sans la prise en charge du PCRE. Tu peux le vérifier en exécutant phpinfo, vérifies la présence de la bibliothèque PCRE.
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 14h58   #3
Membre à l'essai
 
Homme F. Mithieux
Étudiant
Inscription : juin 2008
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme F. Mithieux
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 99
Points : 20
Points : 20
Merci de ta réponse .
Mais sur OVH, comment je vérifies ça ? xD
Arget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 15h03   #4
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
Bonjour,

tu crées une page php que tu appelles comme tu veux et dedans tu mets :

Ce fichier, tu l'envoies via ftp ou autre sur le serveur OVH et ensuite, tu pointes sur ce fichier via navigateur

A+
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 15h32   #5
Membre à l'essai
 
Homme F. Mithieux
Étudiant
Inscription : juin 2008
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme F. Mithieux
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 99
Points : 20
Points : 20
Citation:
Envoyé par syl2095 Voir le message
Bonjour,

tu crées une page php que tu appelles comme tu veux et dedans tu mets :

Ce fichier, tu l'envoies via ftp ou autre sur le serveur OVH et ensuite, tu pointes sur ce fichier via navigateur

A+
Haha, je suis un peu bête oui ^^

La bibliothèque PCRE est bien active .. :/

Code :
1
2
3
pcre
PCRE (Perl Compatible Regular Expressions) Support 	enabled
PCRE Library Version 	6.7.7.4 2008-07-04
Arget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 17h14   #6
Membre chevronné
 
Avatar de Marc3001
 
Homme
Ingénieur développement logiciels
Inscription : février 2008
Messages : 430
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : février 2008
Messages : 430
Points : 682
Points : 682
Quand tu dis ça marche pas, ça donne quoi exactement?

Ca laisse passer les liens externe? Ca renvoie une erreur?
Marc3001 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 17h29   #7
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bonjour,
quelqu'un a vérifié si les preg_replace fonctionnent vraiment ?

Citation:
avant : <a href="http://www.blabla.com/test/test.php">essai url</a>
apres : <a href='#'#'http://www.blabla.com/test/test.php">essai url</a>
Y'aurait pas comme un défaut ?
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2011, 16h05   #8
Membre à l'essai
 
Homme F. Mithieux
Étudiant
Inscription : juin 2008
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme F. Mithieux
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 99
Points : 20
Points : 20
Code :
 [...] href="\"http://fr.wikipedia.org/wiki/Application_web\""[...]
Voilà en gros ce que donne le résultat après le preg_replace ..
Donc aucune erreur, mais il faut croire que mon expression régulière est plutôt bien fausse, mais ce que je ne comprends pas, c'est le fait que cela marche parfaitement en local et me donne:

Personne n'a une expression régulière sous la main qui marche parfaitement pour mon cas ? xD
Arget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2011, 17h13   #9
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bon. Je ne suis pas spécialiste des regex (et c'est peu de le dire !)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$url_temp = $texte_avant;
 
// on veut garder les liens contenant http://www.monsite.com
$monsite_ok = 'www.monsite.com';
// et supprimer tous les autres
$url_temp = str_replace('href="http://'.$monsite_ok, 'href="h-t-t-p://'.$monsite_ok, $url_temp); // on modifie http -> h-t-t-p (pour ne pas passer dans le regex)
$url_temp = preg_replace('#href="http(.*)"#', 'href="#"', $url_temp); // on supprime tous les autres
$url_temp = str_replace('href="h-t-t-p://'.$monsite_ok, 'href="http://'.$monsite_ok, $url_temp); // on remet http
 
$texte_apres = $url_temp;
?>
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2011, 21h39   #10
Membre chevronné
 
Avatar de Marc3001
 
Homme
Ingénieur développement logiciels
Inscription : février 2008
Messages : 430
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : février 2008
Messages : 430
Points : 682
Points : 682
Citation:
Envoyé par jreaux62 Voir le message
Bon. Je ne suis pas spécialiste des regex (et c'est peu de le dire !)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$url_temp = $texte_avant;
 
// on veut garder les liens contenant http://www.monsite.com
$monsite_ok = 'www.monsite.com';
// et supprimer tous les autres
$url_temp = str_replace('href="http://'.$monsite_ok, 'href="h-t-t-p://'.$monsite_ok, $url_temp); // on modifie http -> h-t-t-p (pour ne pas passer dans le regex)
$url_temp = preg_replace('#href="http(.*)"#', 'href="#"', $url_temp); // on supprime tous les autres
$url_temp = str_replace('href="h-t-t-p://'.$monsite_ok, 'href="http://'.$monsite_ok, $url_temp); // on remet http
 
$texte_apres = $url_temp;
?>
J'pense être pire que toi en regex mais j'pense aussi que tes 3 étapes doivent pouvoir se condenser en une seule (sans la passage par h-t-t-p pour exclure le site lui-même).
Marc3001 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2011, 00h55   #11
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Bon, je suis pas un fervent utilisateur des regex. Je suis même plus partant pour utiliser d'autres outils quand c'est possible. Mais comme je ne connais pas CKEditor, je ne connais pas les contraintes...


J'ai testé ceci, et cela semble fonctionner :

Code :
1
2
3
4
5
6
7
8
<?php
$domain = "shikiryu.com";
$url_temp = "href='shikiryu.com/test.html'";
$url_temp = preg_replace('#href=(("|\')[^'.$domain.'].*?("|\'))#', 'href="#"', $url_temp);
echo $url_temp.'<br/>'; // le domaine est bon, le href n'est pas modifié.
$url_temp = "href='example.com/test.html'";
$url_temp = preg_replace('#href=(("|\')[^'.$domain.'].*?("|\'))#', 'href="#"', $url_temp);
echo $url_temp; // example.com est inconnu, l'url est modifié.
http://codepad.viper-7.com/HRridg
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2011, 07h20   #12
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Citation:
Envoyé par Shikiryu Voir le message
Code :
1
2
3
4
5
<?php
$domain = "shikiryu.com"; // site a conserver
$masque = '#href=(("|\')[^'.$domain.'].*?("|\'))#'; // masque
$url_temp = preg_replace($masque, 'href="#"', $url_temp);
?>
Je me suis dit "pas mal !"
... puis ... J'ai poursuivi les tests ... Oups ! "Y'a comme un défaut ..."
Citation:
href="http://shikiryu.com/test.html?id=12"
href="http://shikiryu.com/test.html?id=12" => OK

href="http://www.shikiryu.com/test.html?id=12"
href="http://www.shikiryu.com/test.html?id=12" => OK

href="http://www.example.com/shikiryu.com/test.html?id=12"
href="http://www.example.com/shikiryu.com/test.html?id=12" => PAS OK (même si très peu probable)

href="example.com/test.html"
href="#" => OK

href="www.example.com/test.html"
href="#" => OK

href="http://www.example.com/test.html"
href="http://www.example.com/test.html" => PAS OK (pourtant le cas le plus courant !)

href="httpsdfsdf://www.example.com/test.html"
href="httpsdfsdf://www.example.com/test.html" => PAS OK

href="blabla://www.example.com/test.html"
href="#" => OK
Bizarre ! Bizarre ! ca marche avec href="blabla... mais pas avec href="http... !?
Euuh, je ne capte pas, là ... je continue à chercher ...
-> Initiation aux expressions régulières en PHP
Citation:
href="xhttp://www.example.com/test.html"
href="#" => OK

href="hxttp://www.example.com/test.html"
href="hxttp://www.example.com/test.html" => PAS OK

href="ello qs dfqsdf qsdfq s"
href="#" => OK

href="hello qs dfqsdf qsdfq s"
href="hello qs dfqsdf qsdfq s" => PAS OK
Ce serait juste le href="h.... ???
Pour moi, c'est un mystère mystérieusement mystérieux ...
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2011, 11h16   #13
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Non, en fait, ce n'est pas ma regex qui est erronée mais mon cerveau fatigué.


href="shikiryu.com" ne fonctionnerait pas. Il faut à minima le protocole (http) devant pour être un lien. Le www n'est pas indispensable mais ça peut effectivement arrivé.

Code :
1
2
3
4
5
6
7
8
<?php
$domain = "shikiryu.com";
$url_temp = "href='http://shikiryu.com/test.html'";
$url_temp = preg_replace('#href=(("|\')(http://)?(www.)?[^'.$domain.'].*?("|\'))#', 'href="#"', $url_temp);
echo $url_temp.'<br/>';
$url_temp = "href='http://example.com/test.html'";
$url_temp = preg_replace('#href=(("|\')(http://)?(www.)?[^'.$domain.'].*?("|\'))#', 'href="#"', $url_temp);
echo $url_temp;
les ()? autours de http:// peuvent être retirés si obligatoire (là ça veut dire 0 ou 1)

Après, les tests avec blabla ou httpdmzefjzoj, je préfère les ignorer.
D'une, les liens seront biaisés et ne fonctionneront pas (comme souhaité à la base donc) et de 2, CKEditor étant apparemment un WYSIWYG, il créé les liens lui même et j'ose espéré qu'il contrôle les entrées (ou du moins configurable de ce côté là)
De toute manière, d'autres protocoles peuvent être utilisés (je pense à ftp://, skype://, etc.). Que faire avec des liens de ce type ?
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2011, 11h54   #14
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
En ne prenant que des exemples "viables", j'en suis arrivé à :
Code :
1
2
3
4
5
6
7
<?php
	$domain = "shikiryu.com";
	// masque : on garde http://shikiryu.com et http://www.shikiryu.com
	$masque = '#href=(("|\')(http://)?(www.)?[^'.$domain.'|www.'.$domain.'].*?("|\'))#';
 
$url_temp = preg_replace($masque, 'href="#"', $url_temp);
?>
Citation:
href="http://shikiryu.com/test.html?id=12"
href="http://shikiryu.com/test.html?id=12" => OK

href="http://www.shikiryu.com/test.html?id=12"
href="http://www.shikiryu.com/test.html?id=12" => OK

href="http://www.example.com/shikiryu.com/test.html?id=12"
href="#" => OK

href="http://www.example.com/test.html?id=www.shikiryu.com"
href="#" => OK

href="http://example.com/test.html"
href="#" => OK

href="http://www.example.com/test.html"
href="#" => OK

href="http://jr.blabla.free.fr/test.html"
href="#" => OK
[Edit] C'est moi qui suis débile ou quoi ?
En remplacant (partout) shikiryu.com par okmonsite.com, ca ne marche plus !?!
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2011, 13h55   #15
Membre habitué
 
Homme Lucas GAUTHERON
Lycéen
Inscription : décembre 2008
Messages : 106
Détails du profil
Informations personnelles :
Nom : Homme Lucas GAUTHERON

Informations professionnelles :
Activité : Lycéen

Informations forums :
Inscription : décembre 2008
Messages : 106
Points : 145
Points : 145
http://php.net/manual/fr/function.parse-url.php

Ca va te permettre de récupérer le hostname, c'est ce que tu souhaites non ? Après ça devrait pas être trop compliqué de coupler cette fonction avec une regex qui lui file en argument le contenu de l'attribut HREF
lucas74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2011, 15h29   #16
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Citation:
Envoyé par jreaux62 Voir le message
Code :
1
2
3
4
5
6
7
<?php
	$domain = "shikiryu.com";
	// masque : on garde http://shikiryu.com et http://www.shikiryu.com
	$masque = '#href=(("|\')(http://)?(www.)?[^'.$domain.'|www.'.$domain.'].*?("|\'))#';
 
$url_temp = preg_replace($masque, 'href="#"', $url_temp);
?>
Ta regex est redondante (ce qui la ralentit).
(www.)? veut dire 0 ou 1 'www.'
et [^'.$domain.'|www.'.$domain.'] veut dire différent de domain ou www.domain donc que tu aies 0 ou 1 'www.'
Pour l'instant, c'est l'équivalent de ma dernière regex qui devrait fonctionner.

Mais comme je ne suis pas une bête en regex, je propose une alternative :

http://codepad.viper-7.com/zCrbLl

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// fonction de callback
function search($s){
         // si le domaine n'est pas dans l'url, on renvoie href="#"
	if(!strpos($s[1],'okmonsite.com')) return 'href="#"';
	return $s[0];
}
 
function test($href){
       // on va chercher tous les href sans se préoccuper du domaine
	$pattern = '#href="((http:\/\/)?(www\.)?(.*?)")#'; 
	echo preg_replace_callback($pattern,"search", $href);
}
test('href="http://shikiryu.com/test.html"'); // affiche href="#"
echo '<br/>';
test('href="http://www.example.com/test.html"'); // affiche href="#"
echo '<br/>';
test('href="http://www.okmonsite.com/test.html"'); // affiche href="http://www.okmonsite.com/test.html"
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2011, 16h12   #17
Membre habitué
 
Homme Lucas GAUTHERON
Lycéen
Inscription : décembre 2008
Messages : 106
Détails du profil
Informations personnelles :
Nom : Homme Lucas GAUTHERON

Informations professionnelles :
Activité : Lycéen

Informations forums :
Inscription : décembre 2008
Messages : 106
Points : 145
Points : 145
Citation:
Envoyé par Shikiryu Voir le message
Ta regex est redondante (ce qui la ralentit).
(www.)? veut dire 0 ou 1 'www.'
et [^'.$domain.'|www.'.$domain.'] veut dire différent de domain ou www.domain donc que tu aies 0 ou 1 'www.'
Pour l'instant, c'est l'équivalent de ma dernière regex qui devrait fonctionner.

Mais comme je ne suis pas une bête en regex, je propose une alternative :

http://codepad.viper-7.com/zCrbLl

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// fonction de callback
function search($s){
         // si le domaine n'est pas dans l'url, on renvoie href="#"
	if(!strpos($s[1],'okmonsite.com')) return 'href="#"';
	return $s[0];
}
 
function test($href){
       // on va chercher tous les href sans se préoccuper du domaine
	$pattern = '#href="((http:\/\/)?(www\.)?(.*?)")#'; 
	echo preg_replace_callback($pattern,"search", $href);
}
test('href="http://shikiryu.com/test.html"'); // affiche href="#"
echo '<br/>';
test('href="http://www.example.com/test.html"'); // affiche href="#"
echo '<br/>';
test('href="http://www.okmonsite.com/test.html"'); // affiche href="http://www.okmonsite.com/test.html"
bah pourquoi pas faire comme j'ai suggéré du coup ?! Remplacer ton callback par un truc plus propre :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
function search($s)
{
    $url = parse_url($s[1]);
    if(array_key_exists('host', $url)
       && $url['host'] != 'monsite.com')
    {
        return 'href="#"';
    }
    return $s[0];
}
lucas74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2011, 19h04   #18
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Hello boys, n'oublions pas la contrainte de départ :
Citation:
Envoyé par Arget Voir le message
Des utilisateurs non-enregistrés auront l'occasion de poster des réponses, MAIS, mon chef veut qu'aucun liens publiés dans ces réponses ne pointent sur d'autres sites...
Autrement dit, on parse un texte complet (pas uniquement UNE URL, c'est trop facile ! ...)

-> Initiation aux expressions régulières en PHP

@Shikiryu : j'ai conscience que ma regex était redondante.
Mais quoi que je fasse, la regex ne fait apparemment pas ce que je lui demande, et je suis toujours surpris du résultat !
La preuve, en remplacant (partout) shikiryu.com par okmonsite.com, ca ne donnait plus le bon résultat !
J'ai essayé aussi t'intégrer href="https://www.securite.com... sans succès ...


Comme je ne tiens pas à m'arracher tous les cheveux, je laisse ca à un pro ...
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2011, 19h32   #19
Membre habitué
 
Homme Lucas GAUTHERON
Lycéen
Inscription : décembre 2008
Messages : 106
Détails du profil
Informations personnelles :
Nom : Homme Lucas GAUTHERON

Informations professionnelles :
Activité : Lycéen

Informations forums :
Inscription : décembre 2008
Messages : 106
Points : 145
Points : 145
Citation:
Envoyé par jreaux62 Voir le message
Hello boys, n'oublions pas la contrainte de départ :

Autrement dit, on parse un texte complet (pas uniquement UNE URL, c'est trop facile ! ...)
chezmoiçamarche
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
<?php
function search($s)
{
    static $authorized_hosts = array('google.com');
    $url = parse_url($s[1]);
    if(array_key_exists('host', $url)
       && !in_array($url['host'], $authorized_hosts))
    {
        return 'href="#"';
    }
    return $s[0];
}
 
function antispam($input)
{
       // on va chercher tous les href sans se préoccuper du domaine
	$pattern = '#href="((http:\/\/)?(www\.)?(.*?)")#'; 
	return preg_replace_callback($pattern,"search", $input);
}
 
 
echo antispam('<a href="http://google.com/">lolwut</a> <a href="http://127.0.0.1/">xd</a>');
Output :
<a href="http://google.com/">lolwut</a> <a href="#">xd</a>
lucas74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2011, 20h26   #20
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Citation:
Envoyé par jreaux62 Voir le message
Hello boys, n'oublions pas la contrainte de départ

@Shikiryu : j'ai conscience que ma regex était redondante.
Mais quoi que je fasse, la regex ne fait apparemment pas ce que je lui demande, et je suis toujours surpris du résultat !
La preuve, en remplacant (partout) shikiryu.com par okmonsite.com, ca ne donnait plus le bon résultat !
J'ai essayé aussi t'intégrer href="https://www.securite.com... sans succès ...


Comme je ne tiens pas à m'arracher tous les cheveux, je laisse ca à un pro ...
La contrainte est bien prise en compte par ma réponse. J'ai juste mis que le href pour l'exemple, essaye comme lucas74 et tu verras

A moins que tu n'aies pas compris ma regex, c'est totalement normal que https ne soit pas pris en compte. Par ailleurs, ce n'est pas demandé.

Si on veut le rajouter, il "suffit", je pense, de faire
Code :
 (http://)? => (https?://)?
En parlant de ça, ce serait bien d'avoir un retour de l'OP avant de partir dans toutes ces considérations.
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h16.


 
 
 
 
Partenaires

Hébergement Web