Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenie regulare (link) a "-"...
Forum PHP.pl > Forum > PHP
Krokodyl
Witam.
Mam pytanie apropos wyrażeń regularnych.
W temacie jak automatycznie wstawić link jest napisane:

Kod
<?

$tmp  =  $text; //text to twoj tekst jasne nie :wink:  

  

while(ereg('(http?//)?www.[[:alnum:]/.-_&?=+%]*[[:alnum:]/-_&?=+#]{1}',  $tmp,  $found)){

      $url  =  $found[0];

      $text  =  str_replace($url,  "<A  TARGET=_blank  HREF="http://".$url."">".$url."</A>",  $text);

      $tmp  =  str_replace($url,  "",  $tmp);

  }

  

echo"$text";



?>


Kłopt zaczyna się w momencie gdy mamy adres z myślnikiem np. www.eyeball-design.com.
Zamiana zostaje dokonana tylko do myślnika czyli [b]www.eyeball i tutaj koniec linka.
Majstrowałem przy tym ale skończyła mi się inwencja twórcza.
Podobnie z adresem e-mail w tym samym artykule.
-
Macie jakiś pomysł?
Krokodyl
Cytat

-
Ten link nie działa. Próbowałem kilka razy.
scanner
POdejrzyj, jak to jest np. zrobione na tym forum (chyba to własnie miał na myśli kurtz).
:arrow: bbcodes.php w dystrybucji.
DeyV
Oj, kurtz - też sie naciąłem na ten link winksmiley.jpg
Ale jak zobaczyłem, ze już zniknął - zrozumiałem o co chodziło. Ale na przyszłość tłumacz - nie przeceniaj naszej spostrzegawczości.

A chodziło o to, że phpBB radzi sobie z takimi linkami. A jeśli tak - no to należy zobaczyć jak to robi smile.gif

Dziś mam dobry dzień, wiec zrobiłem to za Ciebie

[php:1:33fe728676]<?php
/**
* Rewritten by Nathan Codding - Feb 6, 2001.
* - Goes through the given string, and replaces xxxx://yyyy with an HTML <a> tag linking
* to that URL
* - Goes through the given string, and replaces www.xxxx.yyyy[zzzz] with an HTML <a> tag linking
* to ]http://www.xxxx.yyyy[/zzzz]
* - Goes through the given string, and replaces xxxx@yyyy with an HTML mailto: tag linking
* to that email address
* - Only matches these 2 patterns either after a space, or at the beginning of a line
*
* Notes: the email one might get annoying - it's easy to make it more restrictive, though.. maybe
* have it require something like xxxx@yyyy.zzzz or such. We'll see.
*/
function make_clickable($text)
{

// pad it with a space so we can match things at the start of the 1st line.
$ret = ' ' . $text;

// matches an "xxxx://yyyy" URL at the start of a line, or after a space.
// xxxx can only be alpha characters.
// yyyy is anything up to the first space, newline, comma, double quote or <
$ret = preg_replace("#([trn ])([a-z0-9]+?){1}://([w-]+.([w-]+.)*[w]+(:[0-9]+)?(/[^ "nrt<]*)?)#i", '1<a href="2://3" target="_blank">2://3</a>', $ret);

// matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing
// Must contain at least 2 dots. xxxx contains either alphanum, or "-"
// zzzz is optional.. will contain everything up to the first space, newline,
// comma, double quote or <.
$ret = preg_replace("#([trn ])(www|ftp).(([w-]+.)*[w]+(:[0-9]+)?(/[^ "nrt<]*)?)#i", '1<a href="http://2.3" target="_blank">2.3</a>', $ret);

// matches an email@domain type address at the start of a line, or after a space.
// Note: Only the followed chars are valid; alphanums, "-", "_" and or ".".
$ret = preg_replace("#([n ])([a-z0-9-_.]+?)@([w-]+.([w-.]+.)*[w]+)#i", "1<a href="mailto:2@3">2@3</a>", $ret);

// Remove our padding..
$ret = substr($ret, 1);

return($ret);
}

############################

$text = '<p>ddd www.w-p.pl link</a> </p> ' ;
echo make_clickable($text);
?>[/php:1:33fe728676]
kurtz
Cytat
Kłopt zaczyna się w momencie gdy mamy adres z myślnikiem np. www.eyeball-design.com.[..]
Majstrowałem przy tym ale skończyła mi się inwencja twórcza.
Podobnie z adresem e-mail w tym samym artykule.
przejrzyj watek http://forum.php.pl/viewtopic.php?t=2834 - temat wraca dosyc czesto a wyglada ze pomysly przedtawione jako alterntywy dla twojego dzialaja - pomyslk z whilem troskze obciaza niepotrzebnie procka ;)

co do twojego kodu: problem dotyczy oczywiscie znaku - aby go wzielo pod uwage musisz go podac na koncu zakresu, czyli:
Kod
while(ereg('(http?//)?www.[[:alnum:]/._&?=+%-]*[[:alnum:]/-_&?=+#]{1}',  $tmp,  $found)){



pozdrawiam
kurtz
Cytat
POdejrzyj, jak to jest np. zrobione na tym forum (chyba to własnie miał na myśli kurtz).
:arrow: bbcodes.php w dystrybucji.
mial mial - ale tu chodzi o dosc specyficzny problem jaki dotyczy wyrazen regularnych w php. jesli uzyjemy - nie przy koncu zakresu ale wewnatrz [] zostanie potraktowane jako wyznacznik przedzialu wartosci.


i wlasnei dlatego mimo miszmaszu z zikajacym postem wydaje mi sie ze warto by watek ocalic.
scanner
A ktoś mówił o kasowaniu?
Krokodyl
Dzieki za pomoc.
Muszę sobie to obejrzeć później na spokojnie (teraz jestem w innej pracy).
-
Tak na marginesie czytając w HYDEPARKu o kobitkach to pojawiła się może jakaś w stadzie forum.php.pl? :wink:
DeyV
A bo to jedna?
Jedna jest nawet 'szefem' (szfową) teemu odpowiedzialnego za design powstajacego portalu php.pl!
Krokodyl
[b]Czy ktoś z Was zna może jakiś sensowny kurs php o wyrażeniach regularnych po polsku:?:
Cudi
:arrow: http://www.leon.w-wa.pl/texts/kurs/text.php

Już kilka razy sie ten adres pojawił od kiedy postuje na tym forum smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.