Jump to content

Recommended Posts

That depends. Are you using the traditional title syntax? If so, you could use preg_replace with a regex like:

 

$str = preg_replace('/\[url=http://(.+?)\](.+?)\[/url\]/', '<a href="$1">$2</a>', $str);

 

Edit: remove "http://" from the regex, for some reason the forum's adding it in.

Link to comment
https://forums.phpfreaks.com/topic/209751-bbcode-help/#findComment-1094971
Share on other sites

thanks for the help... ok i'm trying this but it is not working.  It doesn't turn the text into a hyperlink.

$info = mysql_real_escape_string($_POST['content']);

$data = preg_replace('/\[url\](.+?)\[\/url\]/', '<a href="$1">$1</a>', $info);

echo $data;

 

$info is e.g. www.google.com  ... when i put mouseover it , it's not a hyperlink

Link to comment
https://forums.phpfreaks.com/topic/209751-bbcode-help/#findComment-1094985
Share on other sites

After you define $info, can you just add in var_dump($info); and post the output? I did a quick test with the code below and it worked.

 

$info = '[url=http://google.co.uk]http://google.co.uk[/url]';

$data = preg_replace('/\[url\](.+?)\[\/url\]/', '<a href="$1">$1</a>', $info);

echo $data;

Link to comment
https://forums.phpfreaks.com/topic/209751-bbcode-help/#findComment-1094999
Share on other sites

I see, sorry I misread your OP. I thought you were wanting to convert BBCode URL tags to a link. So you want to look for valid URLs and convert to url here?

 

thanks for the help... ok i'm trying this but it is not working.  It doesn't turn the text into a hyperlink.

(...)

$info is e.g. www.google.com  ... when i put mouseover it , it's not a hyperlink

 

Of course converting the URLs to BBCode tags won't make the link clickable, you'd need to convert the URL to a hyper-link for that.

 

Can you just confirm which output you're after?

Link to comment
https://forums.phpfreaks.com/topic/209751-bbcode-help/#findComment-1095001
Share on other sites

yes to your 1st question.  i have this bbcode which works if i put the url tags around a url.

 

function BBCode($string){

$string = nl2br(htmlspecialchars($string));

$patterns = array(

                                    '`\[b\](.+?)\[/b\]`is',
                                    '`\[i\](.+?)\[/i\]`is',
                                    '`\[u\](.+?)\[/u\]`is',
                                    '`\[strike\](.+?)\[/strike\]`is',
                                    '`\[color=#([0-9]{6})\](.+?)\[/color\]`is',
                                    '`\[email\](.+?)\[/email\]`is',
                                    '`\[img\](.+?)\[/img\]`is',
                                    '`\[url=([a-z0-9]+://)([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*?)?)\](.*?)\[/url\]`si',
                                    '`\[url\]([a-z0-9]+?://){1}([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)\[/url\]`si',
                                    '`\[url\]((www|ftp)\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*?)?)\[/url\]`si',
                                    '`\[flash=([0-9]+),([0-9]+)\](.+?)\[/flash\]`is',
                                    '`\[quote\](.+?)\[/quote\]`is',
                                    '`\[indent](.+?)\[/indent\]`is',
                                    '`\[size=([1-6]+)\](.+?)\[/size\]`is'


                                );

$replaces =  array(

                                    '<strong>\\1</strong>',
                                    '<em>\\1</em>',
                                    '<span style="border-bottom: 1px dotted">\\1</span>',
                                    '<strike>\\1</strike>',
                                    '<span style="color:#\1;">\2</span>',
                                    '<a href="mailto:\1">\1</a>',
                                    '<img src="\1" alt="" style="border:0px;" />',
                                    '<a href="\1\2">\6</a>',
                                    '<a href="\1\2">\1\2</a>',
                                    '<a href="http://\1">\1</a>',
                                    '<object width="\1" height="\2"><param name="movie" value="\3" /><embed src="\3" width="\1" height="\2"></embed></object>',
                                    '<strong>Quote:</strong><div style="margin:0px 10px;padding:5px;background-color:#000000;border:1px dotted #CCCCCC;width:80%;"><em>\1</em></div>',
                                    '<pre>\\1</pre>',
                                    '<h\1>\2</h\1>'



                                    );


$string = preg_replace($patterns, $replaces , $string);

return $string;
}
   

 

but that only works if i put the url tags around the url.  how do i put the tags around a url automatically... like this forum.

 

Link to comment
https://forums.phpfreaks.com/topic/209751-bbcode-help/#findComment-1095002
Share on other sites

Gotchya!

 

Okay, you need a regex then that is able to match valid URLs. I'm not going to write one because there's so many examples available on the net, and they can get complicated.

 

Using a random one I came across:

 

$info = 'http://google.co.uk';

$data = preg_replace('/((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)/', '[url=http://$1]$1[/url]', $info);

echo $data;

 

Again need to remove the "http://" in the second parameter, the forum's adding it in for some reason.

Link to comment
https://forums.phpfreaks.com/topic/209751-bbcode-help/#findComment-1095005
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.