Webstatt.org - Community seit 2006 - 2012 (2024?)

urls umwandeln

Avatar user-180
16.11.2006 18:25

soh liebe freunde der gepflegeten php-programmierung, ich habe eine frage an euch:

es geht dabei um folgenden codeschnipsel:
 
$text = preg_replace_callback('"(\s)(\w+://)?((\w+\.)?[\w-:;&()@]+?\.\w+/?\S*)"',
create_function('$m',
'if ($m[1] != \'\'zwinkern {
$protokoll = strlen($m[2])?$m[2]:\'http://\';
$url = $protokoll.$m[3];
return $m[1].\'\'.$m[2].$m[3].\'\';
}

else return $m[0];'
),
"\n".$text
);


also wenn im $text folgende sachen stehen, soll die die funktion angwewndet werden:
http://www.web.de
www.web.de
web.de
http://web.de

für folgende textbeispiele soll sie nicht angwewndet werden:
21.00092
.66
tag.nacht

also insgesamt sollen alle möglichen arten von links umgweandelt werden alles andere nicht...
wie kann man das genauer festlegen

may the force be with you. but mostly with me.
Avatar user-180
19.11.2006 14:07

weiss keiner was?

may the force be with you. but mostly with me.
user-137
19.11.2006 14:23

Ich würde die function jetzt noch ganz unten reinmachen und es müsste gehen.


<?
$test = "web.de";


if (strstr($test, "www"zwinkern){
$ja = "1";
}

if (strstr($test, "http://"zwinkern){
$ja = "1";
}

if (strstr($test, ".de"zwinkern){
$ja = "1";
}

//Ausführen

if (isset($test)){
// Irgendwas was ausgeführt werden soll..
}
?>

Avatar user-180
21.11.2006 20:01

hmmm kannste das mal in das folgende beispiel einbauen ich weiss net soo ganz genau wie ich das machen soll..

<?php
function bbcodes($text, $url = TRUE, $bb = TRUE) {

# Config #
$max_l = 100; // maximale Länge eines Wortes
$lword_replace = "-<br/>"; // Lange Wörter werden getrennt durch...

//Pfad zu den Smilie-Bildern, (mit abschließendem /, also zb "bilder/smilies/"zwinkern:
$smilie_pfad = "images/smilies/";

// Header und Footer beschreiben, wie...
// der farbige PHP-Code umschlossen wird
$header_php = '<br/><span class="code_ueberschift">php code</span><span class="code_php"><code>';
$footer_php = '</code></span><br/>';

// Zitate umschlossen werden
$header_quote = '<br/><span class="code_ueberschift">zitat</span><span class="code_php">';
$footer_quote = '</span><br/>';

// normaler code umschlossen wird
$header_code = '<br/><span class="code_ueberschift">code</span><span class="code_code"><code>';
$footer_code = '</code></span><br/>';
# Ab hier nichts mehr ändern #

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


# PHP-Code-Blöcke zwischenspeichern #
$c = md5(time());
$pattern = "/\[php\](.*?)\[\/php\]/si";
preg_match_all ($pattern, $text, $results);
for($i=0;$i<count($results[1]);$i++) {
$text = str_replace($results[1][$i], $c.$i.$c, $text);
}
# PHP-Code-Blöcke zwischenspeichern #

# alles, was die Codeblöcke nicht betrifft #
// zu lange Wörter kürzen
$text = htmlentities($text);

$lines = explode("\n", $text);
$merk = $max_l;
for($n=0;$n<count($lines);$n++) {
$words = explode(" ",$lines[$n]);
$count_w = count($words)-1;
if($count_w >= 0) {
for($i=0;$i<=$count_w;$i++) {
$max_l = $merk;
$tword = trim($words[$i]);
$tword = preg_replace("/\[(.*?)\]/si", "", $tword);
$all = substr_count($tword, "http://"zwinkern + substr_count($tword, "https://"zwinkern + substr_count($tword, "www."zwinkern + substr_count($tword, "ftp://"zwinkern;
if($all > 0) {
$max_l = 200;
}
if(strlen($tword)>$max_l) {
$words[$i] = chunk_split($words[$i], $max_l, $lword_replace);
$length = strlen($words[$i])-5;
$words[$i] = substr($words[$i],0,$length);
}
}
$lines[$n] = implode(" ", $words);
} else {
$lines[$n] = chunk_split($lines[$n], $max_l, $lword_replace);
}
}
$text = implode("\n", $lines);

// URLs umformen
if($url) {
//$text = preg_replace('"((|^)((ftp|http|https){1}://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)"si',
// '<a href="\1" target="_blank">\\1</a>', $text);
//$text = preg_replace('"(|^)(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)"si',
// '\\1<a href="http://\2" target="_blank">\\2</a>', $text);
$text = preg_replace_callback('"([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6})"si', 'no_spam', $text);

$text = preg_replace_callback('"(\s)(\w+://)?((\w+\.)?[\w-:;&()@]+?\.\w+/?\S*)"',
create_function('$m',
'if ($m[1] != \'\'zwinkern {
$protokoll = strlen($m[2])?$m[2]:\'http://\';
$url = $protokoll.$m[3];
return $m[1].\'\'.$m[2].$m[3].\'\';
}
else return $m[0];'
),
"\n".$text
);
$text = trim($text);
}

// BB-Code
if($bb) {
//fetgedruckt
$text = preg_replace("/\[b\](.*?)\[\/b\]/si",
"<b>\\1</b>", $text);
//kursiv
$text = preg_replace("/\[i\](.*?)\[\/i\]/si",
"<i>$1</i>", $text);
//unterstrichen
$text = preg_replace("/\[u\](.*?)\[\/u\]/si",
"<u>\\1</u>", $text);
//liste
$text = preg_replace("/\[list\](.*?)\[\/list\]/si",
"<ul>\\1</ul>", $text);
//listenpunkt
$text = preg_replace("/\[list=(.*?)\](.*?)\[\/list\]/si",
"<ol type=\"\\1\">\\2</ol>", $text);
//listenpunkt
$text = preg_replace("/\[\*\](.*?)\\n/si",
"<li>\\1</li>", $text);
//unterstrichen
$text = preg_replace("/\[h1\](.*?)\[\/h1\]/si",
"<span class=\"ueberschrift\">\\1</span><br/>", $text);

//ausrichtung
$text = preg_replace("/\[align=(.*?)\](.*?)\[\/align\]/si",
"<div align=\"\\1\">\\2</div>", $text);

//schriftfarbe
$text = preg_replace("/\[color=(.*?)\](.*?)\[\/color\]/si",
"<font color=\"\\1\">\\2</font>", $text);
//schriftgröße
$text = preg_replace("/\[size=(.*?)\](.*?)\[\/umfliessen\]/si",
"<font size=\"\\1\">\\2</font>", $text);
//bild
$text = preg_replace("/\[img\](.*?)\[\/img\]/si",
"<img src=\"\\1\" border=\"0\" alt=\"bild\"/>", $text);
//bild mit alt-tag
$text = preg_replace("/\[img=(.*?)\](.*?)\[\/img\]/si",
"<img src=\"\\1\" border=\"0\" alt=\"\\2\"/>", $text);

//links/rechts umflossen
$text = preg_replace("/\[umfluss=(.*?)\](.*?)\[\/umfluss\]/si",
"<span class=\"\\1\">\\2</span>", $text);
//ueberschrift
$text = preg_replace("/\[h1\](.*?)\[\/h1\]/si",
"<span class=\"ueberschrift\">\\1\</span><br/>", $text);

//youtube / ect video
$text = preg_replace("/\[video\](.*?)\[\/video\]/si",
"<object type=\"application/x-shockwave-flash\" style=\"width:250px; height:205px\" data=\"\\1\"><param name=\"movie\" value=\"\\1\"></param></object>", $text);

//ueberschrift
$text = preg_replace("/\[h2\](.*?)\[\/h2\]/si",
"<span class=\"unter_ueberschrift\">\\1</span><br/>", $text);

//codeblock
$text = preg_replace("/\[code\](.*?)\[\/code\]/si",
$header_code.'\\1'.$footer_code, $text);
//link
$text = preg_replace("/\[url=http:\/\/(.*?)\](.*?)\[\/url\]/si",
"<a href=\"http://\\1\" title=\"diesem link folgen\">\\2</a>", $text);
//link mit name
$text = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/si",
"<a href=\"http://\\1\" title=\"diesem link folgen\">\\2</a>", $text);
//emailadresse
$text = preg_replace("/\[email](\w+?)@(\w+?)\.(\w+?)\](.*?)\[\/email\]/si",
'$4 &lt;$1 bei $2 punkt $3&gt;', $text);

//die smilies
include("bbcodes_smilies.php"zwinkern;

//zitat
while(preg_match('/\[quote\](.*?)\[\/quote\]/isU', $text)) {
$text = preg_replace('/\[quote\](.*)\[\/quote\]/si',
$header_quote.'\\1'.$footer_quote,
$text);
}

}
# alles, was die Codeblöcke nicht betrifft #

# PHP-Code-Blöcke umwandeln #
for($i=0;$i<count($results[1]);$i++) {
ob_start();
highlight_string(trim($results[1][$i]));
$ht = ob_get_contents();
ob_end_clean();
$all = $header_php.$ht.$footer_php;
if(function_exists("str_ireplace"zwinkern) {
$text = str_replace("[php ]".$c.$i.$c."[/php ]",$all,$text);
} else {
$text = str_replace("[php ]".$c.$i.$c."[/php ]",$all,$text);
$text = str_replace("[php ]".$c.$i.$c."[/php ]",$all,$text);
}
}
# PHP-Code-Blöcke umwandeln #

$text = nl2br($text);
// Text zurückgeben
return $text;
}
?>

may the force be with you. but mostly with me.
user-137
22.11.2006 15:03

Wo genau soll ich es einbinnden also das ist jetzt kein BBCode wenn du das als BBCode willst würde ich es als RegEx, damit kenne ich mich aber nicht so aus.

Avatar user-180
22.11.2006 22:49

am besten bei der urlerkennung (ab zeile 76) würde ich sagen. oder?

may the force be with you. but mostly with me.
user-137
23.11.2006 14:32

Hoffentlich richtig.

<?php
function bbcodes($text, $url = TRUE, $bb = TRUE) {

# Config #
$max_l = 100; // maximale Länge eines Wortes
$lword_replace = "-<br/>"; // Lange Wörter werden getrennt durch...

//Pfad zu den Smilie-Bildern, (mit abschließendem /, also zb "bilder/smilies/"zwinkern:
$smilie_pfad = "images/smilies/";

// Header und Footer beschreiben, wie...
// der farbige PHP-Code umschlossen wird
$header_php = '<br/><span class="code_ueberschift">php code</span><span class="code_php"><code>';
$footer_php = '</code></span><br/>';

// Zitate umschlossen werden
$header_quote = '<br/><span class="code_ueberschift">zitat</span><span class="code_php">';
$footer_quote = '</span><br/>';

// normaler code umschlossen wird
$header_code = '<br/><span class="code_ueberschift">code</span><span class="code_code"><code>';
$footer_code = '</code></span><br/>';
# Ab hier nichts mehr ändern #

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


# PHP-Code-Blöcke zwischenspeichern #
$c = md5(time());
$pattern = "/\[php\](.*?)\[\/php\]/si";
preg_match_all ($pattern, $text, $results);
for($i=0;$i<count($results[1]);$i++) {
$text = str_replace($results[1][$i], $c.$i.$c, $text);
}
# PHP-Code-Blöcke zwischenspeichern #

# alles, was die Codeblöcke nicht betrifft #
// zu lange Wörter kürzen
$text = htmlentities($text);

$lines = explode("\n", $text);
$merk = $max_l;
for($n=0;$n<count($lines);$n++) {
$words = explode(" ",$lines[$n]);
$count_w = count($words)-1;
if($count_w >= 0) {
for($i=0;$i<=$count_w;$i++) {
$max_l = $merk;
$tword = trim($words[$i]);
$tword = preg_replace("/\[(.*?)\]/si", "", $tword);
$all = substr_count($tword, "http://"zwinkern + substr_count($tword, "https://"zwinkern + substr_count($tword, "www."zwinkern + substr_count($tword, "ftp://"zwinkern;
if($all > 0) {
$max_l = 200;
}
if(strlen($tword)>$max_l) {
$words[$i] = chunk_split($words[$i], $max_l, $lword_replace);
$length = strlen($words[$i])-5;
$words[$i] = substr($words[$i],0,$length);
}
}
$lines[$n] = implode(" ", $words);
} else {
$lines[$n] = chunk_split($lines[$n], $max_l, $lword_replace);
}
}
$text = implode("\n", $lines);

// URLs umformen
if($url) {
//$text = preg_replace('"((|^)((ftp|http|https){1}://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)"si',
// '<a href="\1" target="_blank">\\1</a>', $text);
//$text = preg_replace('"(|^)(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)"si',
// '\\1<a href="http://\2" target="_blank">\\2</a>', $text);
$text = preg_replace_callback('"([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6})"si', 'no_spam', $text);

// Überprüfen
if (strstr($test, "www"zwinkern){
$ja = "1";
}

if (strstr($test, "http://"zwinkern){
$ja = "1";
}

if (strstr($test, ".de"zwinkern){
$ja = "1";
}

if (isset($ja)){

$text = preg_replace_callback('"(\s)(\w+://)?((\w+\.)?[\w-:;&()@]+?\.\w+/?\S*)"',
create_function('$m',
'if ($m[1] != \'\'zwinkern {
$protokoll = strlen($m[2])?$m[2]:\'http://\';
$url = $protokoll.$m[3];
return $m[1].\'\'.$m[2].$m[3].\'\';
}
else return $m[0];'
),
"\n".$text
);
$text = trim($text);
}

}

//Überprüfen Ende

// BB-Code
if($bb) {
//fetgedruckt
$text = preg_replace("/\[b\](.*?)\[\/b\]/si",
"<b>\\1</b>", $text);
//kursiv
$text = preg_replace("/\[i\](.*?)\[\/i\]/si",
"<i>$1</i>", $text);
//unterstrichen
$text = preg_replace("/\[u\](.*?)\[\/u\]/si",
"<u>\\1</u>", $text);
//liste
$text = preg_replace("/\[list\](.*?)\[\/list\]/si",
"<ul>\\1</ul>", $text);
//listenpunkt
$text = preg_replace("/\[list=(.*?)\](.*?)\[\/list\]/si",
"<ol type=\"\\1\">\\2</ol>", $text);
//listenpunkt
$text = preg_replace("/\[\*\](.*?)\\n/si",
"<li>\\1</li>", $text);
//unterstrichen
$text = preg_replace("/\[h1\](.*?)\[\/h1\]/si",
"<span class=\"ueberschrift\">\\1</span><br/>", $text);

//ausrichtung
$text = preg_replace("/\[align=(.*?)\](.*?)\[\/align\]/si",
"<div align=\"\\1\">\\2</div>", $text);

//schriftfarbe
$text = preg_replace("/\[color=(.*?)\](.*?)\[\/color\]/si",
"<font color=\"\\1\">\\2</font>", $text);
//schriftgröße
$text = preg_replace("/\[size=(.*?)\](.*?)\[\/umfliessen\]/si",
"<font size=\"\\1\">\\2</font>", $text);
//bild
$text = preg_replace("/\[img\](.*?)\[\/img\]/si",
"<img src=\"\\1\" border=\"0\" alt=\"bild\"/>", $text);
//bild mit alt-tag
$text = preg_replace("/\[img=(.*?)\](.*?)\[\/img\]/si",
"<img src=\"\\1\" border=\"0\" alt=\"\\2\"/>", $text);

//links/rechts umflossen
$text = preg_replace("/\[umfluss=(.*?)\](.*?)\[\/umfluss\]/si",
"<span class=\"\\1\">\\2</span>", $text);
//ueberschrift
$text = preg_replace("/\[h1\](.*?)\[\/h1\]/si",
"<span class=\"ueberschrift\">\\1\</span><br/>", $text);

//youtube / ect video
$text = preg_replace("/\[video\](.*?)\[\/video\]/si",
"<object type=\"application/x-shockwave-flash\" style=\"width:250px; height:205px\" data=\"\\1\"><param name=\"movie\" value=\"\\1\"></param></object>", $text);

//ueberschrift
$text = preg_replace("/\[h2\](.*?)\[\/h2\]/si",
"<span class=\"unter_ueberschrift\">\\1</span><br/>", $text);

//codeblock
$text = preg_replace("/\[code\](.*?)\[\/code\]/si",
$header_code.'\\1'.$footer_code, $text);
//link
$text = preg_replace("/\[url=http:\/\/(.*?)\](.*?)\[\/url\]/si",
"<a href=\"http://\\1\" title=\"diesem link folgen\">\\2</a>", $text);
//link mit name
$text = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/si",
"<a href=\"http://\\1\" title=\"diesem link folgen\">\\2</a>", $text);
//emailadresse
$text = preg_replace("/\[email](\w+?)@(\w+?)\.(\w+?)\](.*?)\[\/email\]/si",
'$4 &lt;$1 bei $2 punkt $3&gt;', $text);

//die smilies
include("bbcodes_smilies.php"zwinkern;

//zitat
while(preg_match('/\[quote\](.*?)\[\/quote\]/isU', $text)) {
$text = preg_replace('/\[quote\](.*)\[\/quote\]/si',
$header_quote.'\\1'.$footer_quote,
$text);
}

}
# alles, was die Codeblöcke nicht betrifft #

# PHP-Code-Blöcke umwandeln #
for($i=0;$i<count($results[1]);$i++) {
ob_start();
highlight_string(trim($results[1][$i]));
$ht = ob_get_contents();
ob_end_clean();
$all = $header_php.$ht.$footer_php;
if(function_exists("str_ireplace"zwinkern) {
$text = str_replace("[php ]".$c.$i.$c."[/php ]",$all,$text);
} else {
$text = str_replace("[php ]".$c.$i.$c."[/php ]",$all,$text);
$text = str_replace("[php ]".$c.$i.$c."[/php ]",$all,$text);
}
}
# PHP-Code-Blöcke umwandeln #

$text = nl2br($text);
// Text zurückgeben
return $text;
}
?>

Avatar user-180
24.11.2006 18:49

hm geht irgentwie nicht

may the force be with you. but mostly with me.
user-135
28.11.2006 00:00

Ich wieß nich, obs genau das ist was du jetzt suchst, aber du kannst es ja mal probieren. Das sollte alle links matchen, auch ohne callback..:

$text = preg_replace('/(?traurig?:http(s?)\:\/\/)|(www\.))(\S+)/s', '\\0', $text);

Das \S könntest jetzt natürlich mit deinem regex dafür ersetzen, auf sowas hatt ich jetzt kb frech