TalkPHP

TalkPHP (http://www.talkphp.com/forums.php)
-   Absolute Beginners (http://www.talkphp.com/absolute-beginners/)
-   -   ignore hyperlinked text (http://www.talkphp.com/absolute-beginners/5076-ignore-hyperlinked-text.html)

unitechy 10-30-2009 06:23 PM

ignore hyperlinked text
 
I have been working on some wp-plugin to practice php.
I have made a dictionary... which reads posts from wordpress post and the plugin converts difficult words stored in the a text file.
Now I don't want the plugin to read hyperlinked text. how do I achieve that? here is my code.

PHP Code:

if(stristr($the_content,$wordAndMeaning[0]) != false)
            {
                
$the_contentstr_replace($wordAndMeaning[0], "<acronym title=\"" $wordAndMeaning[1] . "\">" $wordAndMeaning[0] . "</acronym>"$the_content);
            } 


unitechy 11-01-2009 05:28 PM

Can anyone please reply?

Rhinos 11-01-2009 08:51 PM

You could use your function and then use a regular expression to remove all the <acronym> tags that appear inside <a> tags.

Here is a regular expression I have come up with. I have only tested it using a javascript regexp tester at http://www.regular-expressions.info/...ptexample.html

It should be the same for PHP though:

PHP Code:

$the_content preg_replace('~(<a.*>)<acronym.*>(.*)</acronym>(</a>)~i''$1$2$3'$the_content); 

Let me know how you get on.

delayedinsanity 11-01-2009 09:11 PM

Your regexp is far too greedy, if there's multiple occurences, you might find that it strips them all out and everything in between. Something like the following (untested) may work;

php Code:
$the_content = preg_replace('#(<a[^href]+href[^>]+>)<acronym[^>]+>([^<]+)</acronym></a>#', '$1$2</a>', $the_content);

Rhinos 11-01-2009 09:54 PM

Your right. I've tried to work mine a little since when I tried yours on the javascript tester page it didn't work with the following information:

Regexp: (<a[^>]*>)?(<acronym[^>]*>(.*?)</acronym>)(</a>)?
Subject string: hey <a href="test"><acronym>yo</acronym> yo <acronym>bob</acronym></a> what's up? <a href="test">nothing</a>
Replacement text: $1$3$4

Code:

$the_content = preg_replace('~(<a[^>]*>)?(<acronym[^>]*>(.*?)</acronym>)(</a>)?~i', '$1$3$4', $the_content);
Let me know what you think.

unitechy 11-02-2009 06:36 AM

Thank you very much for the replies. I have used the following code now.
Code:

while(!preg_match(<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>,$the_content))
                                {
                                $the_content= str_replace($wordAndMeaning[0], "<acronym title=\"" . $wordAndMeaning[1] . "\">" . $wordAndMeaning[0] . "</acronym>", $the_content);
                                }



All times are GMT. The time now is 05:12 PM.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0