Witam,
Mam problem z funkcją generującą BBCODE url z atrybutu title wstawianego linku. Są dwie następujące funkcje:
Pierwsza:
Kod php:
function convert_url_to_bbcode_callback_auto_title($messagetext)
{
$messagetext = str_replace('\"', '"', $messagetext);
static $urlSearchArray, $urlReplaceArray, $emailSearchArray, $emailReplaceArray;
if (empty($urlSearchArray))
{
$taglist = '\[b|\[i|\[u|\[left|\[center|\[right|\[indent|\[quote|\[highlight|\[\*' .
'|\[/b|\[/i|\[/u|\[/left|\[/center|\[/right|\[/indent|\[/quote|\[/highlight';
$urlSearchArray = array(
"#(^|(?<=[^_a-z0-9-=\]\"'/@]|(?<=" . $taglist . ")\]))((https?|ftp|gopher|news|telnet)://|www\.)((\[(?!/)|[^\s[^$`\"'|{}<>])+)(?!\[/url|\[/img)(?=[,.!)]*(\)\s|\)$|[\s[]|$))#siU"
);
$urlReplaceArray = array(
"[url]\\2\\4[/url]"
);
$emailSearchArray = array(
"/([ \n\r\t])([_a-z0-9-]+(\.[_a-z0-9-]+)*@[^\s]+(\.[a-z0-9-]+)*(\.[a-z]{2,4}))/si",
"/^([_a-z0-9-]+(\.[_a-z0-9-]+)*@[^\s]+(\.[a-z0-9-]+)*(\.[a-z]{2,4}))/si"
);
$emailReplaceArray = array(
"\\1[email]\\2[/email]",
"[email]\\0[/email]"
);
}
$text = preg_replace_callback($urlSearchArray, "auto_title", $messagetext);
if (strpos($text, "@"))
{
$text = preg_replace($emailSearchArray, $emailReplaceArray, $text);
}
return $text;
}
Druga:
Kod php:
function auto_title ($text) {
$options = array( 'http' => array(
'user_agent' => 'worldwidecreations.com Linker',
'max_redirects' => 10,
'timeout' => 60,
) );
$context = stream_context_create( $options );
if ($text[2] == 'www.' or $text[2] == 'WWW.') { $text[4] = $text[2] . $text[4]; $text[2] = 'http://'; }
$paged = @fopen( $text[2] . $text[4], "r" );
if ($paged) {
while (!feof($paged) and ($x < 1000)) { $page .= fread($paged, 8192); $x++; }
fclose($paged);
}
preg_match("/<title>[\n\r\s]*(.*)[\n\r\s]*<\/title>/", $page, $title);
if ($title[1] == '') { $title[1] = $text[2] . $text[4]; }
return "[url=\"" . $text[2] . $text[4] . "\"]" . preg_replace("/\&.+\;/", '', $title[1]) . "[/url]";
}
No i na koniec wywołanie (wstawiony link to żadna reklama, tylko przykładowa strona z google, która ma w title polskie znaki):
Kod php:
$messagetext='http://histmag.org/forum/index.php?topic=9722.0';
$messagetext = preg_replace(
'#(^|\[/(' . $skiptaglist . ')\])(.*(\[(' . $skiptaglist . ')|$))#siUe',
"convert_url_to_bbcode_callback_auto_title('\\3', '\\1')",
$messagetext
);
echo convert_url_to_bbcode_callback_auto_title($messagetext);
No i na koniec dostaje takie krzaki:
Podejrzewam, że błąd jest w pierwszej funkcji w tym miejscu:
Kod php:
$urlSearchArray = array(
"#(^|(?<=[^_a-z0-9-=\]\"'/@]|(?<=" . $taglist . ")\]))((https?|ftp|gopher|news|telnet)://|www\.)((\[(?!/)|[^\s[^$`\"'|{}<>])+)(?!\[/url|\[/img)(?=[,.!)]*(\)\s|\)$|[\s[]|$))#siU"
);
Ale sam sobie nie poradzę z tym problemem, mogę prosić o pomoc?