ugrás a tartalomhoz

PHPMailer - linkek

Agi · 2004. Szep. 21. (K), 20.54
Szeretném megkérdezni, hogy ha egy textarea mezőbe beírt szöveget szeretnék elküldeni egy megadott email címre és HTML alapú levelet készítek, akkor megoldható-e, ha a szöveges mezőbe egy weboldalt írok, akkor ez klikkelhető legyen.
A szöveget küldés előtt így formázom: $Szoveg=nl2br($Szoveg)

Boogie által ismertetett PHPMailer()-t használom a levél elküldéséhez. Természetesen a levél tartalmaz külön fejlécet, képet is, ezért kell html formátumúnak lennie.

Kösz
Ági
 
1

linkek?

bbalint · 2004. Szep. 22. (Sze), 14.43
a linkeket pontosan hogy tetszik érteni?
ha valahol a szövegben olyan van, hogy www.weblabor.hu vagy http://ez-meg.az/valahol/valami.html akkor azokból link legyen?
vagy esetleg ez már megvan és a levélben készen állnak, várnak a rendes ki <a href="/..."> tag-ek?

bbalint
2

Kedves bbalint! Én az els

Agi · 2004. Szep. 22. (Sze), 18.03
Kedves bbalint!

Én az első variációra gondoltam, amikor a szövegben van egy www.weblabor.hu akkor ezen a link is rajta legyen. Nem html-es formátumnál ez automatikus, de a html-esnél nem működik.
Természetesen én be tudom írni a megfelelő kódot a szövegbe, de nem én töltöm majd ki ezeket a szövegeket, hanem a felhasználó.

Agi
3

Kedves Ági! Két lehetős

Anonymous · 2004. Szep. 22. (Sze), 18.24
Kedves Ági!

Két lehetőséget tudok:
1.
A textarea szögegstringjét szétszeded tömbre, határoló karakter a szóköz:
$ki = explode(" ", $_POST["input"]);
ezután egy ciklusban végignézed a tömbelemeket, hogy tartalmaznak-e 'http://' részt. Ha igen, akkor húzz rá egy <a href... elemet. Végül vissza stringbe: implode().
Ugyanezzel a lendülettel linkesítheted a mailcímeket is.

2.
Használj reguláris függvényt. Ezeket tkp. erre is találták ki.

Üdv: Thom
4

reguláris kifejezés ...

bbalint · 2004. Szep. 22. (Sze), 19.04
akkor a megoldás, hogy ilyen reguláris kifejezéssel cserélgeted le őket ...

a preg_replace() dokumentációjánál, a felhasználók által írt megjegyzéseknél van egy-két erre ...

dm147 at web dot de hozzászólása,
$text = preg_replace('`(http|ftp)+(s)?:(//)((\w|\.|\-|_)+)(/)?(\S+)?`i', '<a href="/href="/href="$0""" target="_blank">$0</a>', $text);

és cgamedude at yahoo dot com "találmánya"
function InsertLinks($Text){
 $NotAnchor = '(?<!"|href=|hrefs=s|href=s|hrefs=)';
 $Protocol = '(http|ftp|https)://';
 $Domain = '[w]+(.[w]+)';
 $Subdir = '([w-.,@?^=%&:/~+#]*[\w\-\@?^=%&\/~\+#])?';
 $Expr = '/' . $NotAnchor . $Protocol . $Domain . $Subdir . '/i';
 
 $Result = preg_replace($Expr, '<a href="/href="/href="$0""" target="_blank">$0</a>', $Text);
 
 $NotAnchor = '(?<!"|href=|href\s=\s|href=\s|href\s=)';
 $NotHTTP = '(?<!:\/\/)';
 $Domain = 'www(.[\w]+)';
 $Subdir = '([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?';
 $Expr = '/' . $NotAnchor . $NotHTTP . $Domain . $Subdir . '/i';

 return(preg_replace($Expr, '<a href="http://$0" target="_blank">$0</a>', $Result));
}

én ez utóbbi dolgot tudnám/tudom javasolni, cseréli a http://-s és www.-vel kezdődő dolgokat is,

bbalint
5

Kedves bbalint! Kipróbál

Agi · 2004. Szep. 22. (Sze), 22.09
Kedves bbalint!

Kipróbáltam mind a két megoldást, az első működik, de sajnos a második elegánsabb megoldásnál hibajelzést kapok:

Warning: Unknown modifier '/'

Ezt a következő sorra írja ki:

$Result = preg_replace($Expr, '<a href="/href="$0"" target="_blank">$0</a>', $Text);

Tehát az $Expr változóban levő '/' nem tetszik neki.

Agi
6

szeretünk, drúpál!?

bbalint · 2004. Szep. 22. (Sze), 23.06
nem próbáltam a kódot, csak bemásoltam ide ... amit talán mégse kellett volna mivel. a visszaperjelekkel történt valami és ettől nem műkszál a dolog... nézd meg az eredetit mivel az ott jó. de tényleg.

bbalint
8

A hiba az ön készülékében

Bártházi András · 2004. Szep. 23. (Cs), 08.04
Nekem gond nélkül sikerült idemásolnom. Nem lehet, hogy a másolás során veszett el az információ? Nem látom, hogy a Drupal miért vágna le bármi is belőle.

<?
function InsertLinks ( $Text )
{
//  First match things beginning with http:// (or other protocols)
   $NotAnchor = '(?<!"|href=|href\s=\s|href=\s|href\s=)';
   $Protocol = '(http|ftp|https):\/\/';
   $Domain = '[\w]+(.[\w]+)';
   $Subdir = '([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?';
   $Expr = '/' . $NotAnchor . $Protocol . $Domain . $Subdir . '/i';

   $Result = preg_replace( $Expr, "<a href=\"$0\" title=\"$0\" target=\"_blank\">$0</a>", $Text );

//  Now match things beginning with www.
   $NotAnchor = '(?<!"|href=|href\s=\s|href=\s|href\s=)';
   $NotHTTP = '(?<!:\/\/)';
   $Domain = 'www(.[\w]+)';
   $Subdir = '([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?';
   $Expr = '/' . $NotAnchor . $NotHTTP . $Domain . $Subdir . '/i';

   return preg_replace( $Expr, "<a href=\"http://$0\" title=\"http://$0\" target=\"_blank\">$0</a>", $Result );
}
?>
-boogie-
9

Kedves boogie! Bemásoltam

Agi · 2004. Szep. 23. (Cs), 08.24
Kedves boogie!

Bemásoltam újra az általad megadott verziót, és most már működik. Nem tudom mi volt az előző verzióval a gond.

Agi
7

PHP vs. Java

Anonymous · 2004. Szep. 23. (Cs), 00.37
Mivel beviteli mezőt ellenőrző/módosító scriptről van szó, ezért javasolnám inkább a szerveroldali checket egy PHP scripttel:

function check_url(&$string,$notag=0){
global $maxurllen;

$httpurl="(((f|ht){1}tp://)[a-zA-Z0-9##kukac##:%_.~#-\?&]+[a-zA-Z0-9@:%_~#\?&])";
$wwwsurl="(([[:space:]+]|^)(www[.][a-zA-Z0-9##kukac##:%_.~#-\?&]+[a-zA-Z0-9@:%_~#\?&]))";
$mailurl="([-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.".
     "[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+)";

if(eregi($httpurl,$string)){
if(!$notag){
$tmp=$string;
$string=eregi_replace($httpurl,"<a href=\"\\1\" target=\"_blank\">",$string);
if(strlen($tmp)>$maxurllen) $string=$string.substr($tmp,0,$maxurllen-5)."(...)</a>";
else $string=$string.$tmp."</a>";
}
return true;
}

if(eregi($wwwsurl,$string)){
if(!$notag){
$tmp=$string;
$string=eregi_replace($wwwsurl,"\\2<a href=\"http://\\3\" target=\"_blank\">",$string);
if(strlen($tmp)>$maxurllen) $string=$string.substr($tmp,0,$maxurllen-5)."(...)"."</a>";
else $string=$string.$tmp."</a>";
}
return true;
}

if(eregi($mailurl,$string)){
if(!$notag){
$tmp=$string;
$string=eregi_replace($mailurl,"<a href=\"mailto:\\1\">",$string);
if(strlen($tmp)>$maxurllen) $string=$string.substr($tmp,0,$maxurllen-5)."(...)"."</a>";
else $string=$string.$tmp."</a>";
}
return true;
}

return false;
}


ahol &$string az ellenőrzendő string, $notag pedig az ellenőrzés/csere flagje (0=linkesítés, 1=csak ellenőrzés).

Üdv
ZsoLa