PHPMailer - linkek
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
■ 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
linkek?
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
Kedves bbalint! Én az els
É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
Kedves Ági! Két lehetős
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
reguláris kifejezés ...
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"
$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
Kedves bbalint! Kipróbál
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
szeretünk, drúpál!?
bbalint
A hiba az ön készülékében
Kedves boogie! Bemásoltam
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
PHP vs. Java
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