Solved

preg replace for links

Posted on 2009-05-08
2
459 Views
Last Modified: 2012-08-14
hello there,
I have a little function for links to replace them from a string and its working fine..
I would like to add something so that if there is an image inside the link to ignore the replace
for example this code does this




$post = preg_replace('/\[url="?([^\]"]+)[\]"].*/i', '$1', $post);
 
[URL="http://google1.com"]google is a search engine[/URL]
[URL=http://google2.com]google is a search engine[/URL]
[URL=http://googleimg.com][IMG]http://google.com/logo.jpg[/IMG][/URL]
 
into
 
http://google1.com
http://google2.com
http://googleimg.com
 
 
im trying to do something so if there is [img] tags inside the [url] to NOT do a replace...
how can I do that?

Open in new window

0
Comment
Question by:XK8ER
  • 2
2 Comments
 
LVL 8

Expert Comment

by:fcardinaux
ID: 24342537
Is $post a text where there can be any number of links ?

If not, if each $post only consists in one link, you can do this:

<?php
 
$posts = array(
    '[URL="http://google1.com"]google is a search engine[/URL]',
    '[URL=http://google2.com]google is a search engine[/URL]',
    '[URL=http://googleimg.com][IMG]http://google.com/logo.jpg[/IMG][/URL]');
 
foreach ($posts as $post) {
    
    if (false === stripos($post, '[img]')) {
        $post = preg_replace('/\[url="?([^\]"]+)[\]"].*/i', '$1', $post);
    }
    
    echo "$post<br>\n";
}
 
?>

Open in new window

0
 
LVL 8

Accepted Solution

by:
fcardinaux earned 500 total points
ID: 24342626
In the other situation, you need to start by transforming the image links into a different, unmatchable pattern, then to replace the URLs, and finally to transform the image links back to their original pattern.
<?php
 
$post = <<<ENDOFPOST
Everybody knows that [URL="http://google.com"]google dot com[/URL] is a search engine, and 
that [URL=http://yahoo.com]yahoo dot com[/URL] is a search engine as well. Here is google's
logo: [URL=http://googleimg.com][IMG]http://google.com/logo.jpg[/IMG][/URL]. Enjoy!
ENDOFPOST;
 
$post = preg_replace('/\[url="?([^\]"]+)"?\]\[img\]([^\[]*)\[\/img\]\[\/url\]/i', '{~I~$1~M~$2~G~}', $post);
$post = preg_replace('/\[url="?([^\]"]+)"?\][^\[]*\[\/url\]/i', '$1', $post);
$post = preg_replace('/\{~I~([^~]*)~M~([^~]*)~G~\}/i', '[URL="$1"][IMG]$2[/IMG][/URL]', $post);
    
echo "$post<br>\n";
 
?>

Open in new window

0

Featured Post

Networking for the Cloud Era

Join Microsoft and Riverbed for a discussion and demonstration of enhancements to SteelConnect:
-One-click orchestration and cloud connectivity in Azure environments
-Tight integration of SD-WAN and WAN optimization capabilities
-Scalability and resiliency equal to a data center

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
I think I know what this error means, but I need some other eyes on it... 32 49
Wordpress Query 5 24
issue with DB import 1 17
Checking https returns 301 20 13
This article will explain how to display the first page of your Microsoft Word documents (e.g. .doc, .docx, etc...) as images in a web page programatically. I have scoured the web on a way to do this unsuccessfully. The goal is to produce something …
Generating table dynamically is the most common issue faced by php developers.... So it seems there is a need of an article that explains the basic concept of generating tables dynamically. It just requires a basic knowledge of html and little maths…
The viewer will learn how to count occurrences of each item in an array.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

790 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question