Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.4k views
in Technique[技术] by (71.8m points)

php - how do I make a bbcode to parse url tags into links?

How should I go about parsing a url in php? I wanna make it so it goes

[url=http://www.google.com]Google[/url]

Turns into:

<a href="http://www.google.com">Google</a>

This is the code I'm using for my other bb codes:

function postparser($post){ 
        $post = str_replace("
",'END_OF_LINE',$post);

        $post = str_replace("[line]",'HORIZONTAL_LINE',$post);

        $post = str_replace("[bold]",'BOLD_TEXT_START',$post);
        $post = str_replace("[/bold]",'BOLD_TEXT_END',$post);

        $post = str_replace("[yt]",'YOUTUBE_START',$post);
        $post = str_replace("[/yt]",'YOUTUBE_END',$post);

        $post = sanitize($post);

        $post = str_replace("END_OF_LINE",'<br />',$post);

        $post = str_replace("HORIZONTAL_LINE",'<hr />',$post);

        $post = str_replace("BOLD_TEXT_START",'<b>',$post);
        $post = str_replace("BOLD_TEXT_END",'</b>',$post);

        $post = str_replace("YOUTUBE_START",'<iframe width="560" height="315" src="http://www.youtube.com/embed/',$post);
        $post = str_replace("YOUTUBE_END",'" frameborder="0" allowfullscreen></iframe>',$post);

        return $post;
    }

How would I go about doing this?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
$post = preg_replace('/[url=(.+?)](.+?)[/url]/', '<a href="1">2</a>', $post);

That will turn: [url=http://google.com]Google[/url]

Into parsed bbcode text: Google

You'll probably want to use more specific regex than just .+ to filter out potentially bad/dangerous input.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...