Autor | Zpráva | ||
---|---|---|---|
Niik Profil * |
#1 · Zasláno: 26. 4. 2014, 19:53:08
Mám php funkci, která mění url na odkazy. Ale mám problém, když se v řetězci, v kterém mají být převedené url na odkazy objeví například obrázek ve formátu:
<img src="http://somelink.com/picture.jpg"> tak to také převede url v src na odkaz. Jak by se tomu dalo vyhnout?
Funkce <?php $string='<img src="http://somelink.com/img.jpg"> http://somelink.com'; echo makelink($string); function makeLink($string){ $string = preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i","$1http:$2",$string); $string = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</A>",$string); $string = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<A HREF=\"mailto:$1\">$1</A>",$string); return $string; } ?> Ještě malí příklad když mám řetězec: <img src="http://somelink.com/img.jpg"> http://somelink.com Jak by měl dopadnout výsledek: <img src="http://somelink.com/img.jpg"> <a href="http://somelink.com" target="_blank">http://somelink.com</a> Co dělá funkce teď: <img src="<a href="http://somelink.com/img.jpg" target="_blank">http://somelink.com/img.jpg</a>"> <a href="http://somelink.com" target="_blank">http://somelink.com</a> Doufám, že jsem vysvětlil dostatečně svůj problém. |
||
lionel messi Profil |
Som len amatér, môže tam byť chyba, ale chcem pomôcť, skúsim niečo zosmoliť:
V tomto stave to obrázky neprevedie vôbec, ešte skúsim porozmýšľať nad tým, aby ich previedlo tak, ako treba. $string = preg_replace("/([^\w\/])(<! src=[^\"])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i","$1http:$2",$string); $string = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</A>",$string); $string = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<A HREF=\"mailto:$1\">$1</A>",$string); Tak to nefunguje, veľmi sa ospravedlňujem… |
||
Tori Profil |
#3 · Zasláno: 27. 4. 2014, 18:02:41
Niik:
Jde zřejmě jen o ta první dvě nahrazení. U prvního přidáte omezení, že znaky před "www" nebudou obsahovat uvozovku/apostrof, u druhého upřesníte protokol. Píšu taky z hlavy. $string = preg_replace("/([^\w\"'\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i","$1http:$2",$string); $string = preg_replace("/((?:https?|ftp):\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</A>",$string); |
||
lionel messi Profil |
Tori:
Dnes som testol vaše riešenie, správna odpoveď ma totiž veľmi zaujíma (možno ešte viac než Niika :-)). Zdá sa, že funguje, keď sú reguláry v nasledovnej podobe (chytilo sa to až po pridaní vyznačenej asercie do vášho druhého reguláru: $string = preg_replace("/([^\w\"'\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i","$1http:$2",$string); $string = preg_replace("/(?<! src=\")((?:https?|ftp):\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</A>",$string); $string = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<A HREF=\"mailto:$1\">$1</A>",$string); |
||
Tori Profil |
lionel messi:
Jasně, zapomněla jsem, dík. Možná by stačila v aserci jen uvozovka+apostrof (pro jiné atributy než jen src). |
||
Niik Profil * |
#6 · Zasláno: 28. 4. 2014, 21:31:25
lionel messi:
Tvoje řešení funguje zatím bez problému, děkuji. Nestačilo by ale jenom pohlídat že před začátkem url musí být mezera? |
||
Časová prodleva: 10 let
|
0