[wp-hackers] Howto exclude capital words (within URL address) from being searched and replaced?

Ozh ozh at planetozh.com
Thu Jan 22 15:31:11 GMT 2009


> Could anyone suggest how I could escape the words inside <a> tag please?

Most likely, you want to exclude anything inside tags, not just <a> (and 
not just a tricky regexp to find URLs only). For instance you don't want 
to deal with <em class="BOLD"> or whatever is inside a tag.

The following is untested but should be a decent start:

--- code ---

add_filter('the_content', 'ckunte_smallcaps_parse');

function ckunte_smallcaps_parse($content) {
  $split_on_html_tags = '/(<[^>]+>)/';
  $content_split = preg_split($split_on_html_tags, $content,
    -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

  foreach ($content_split as $num=>$chunk) {
    if (substr($chunk, 0, 1) != '<') {
      $content_split[$num] = ckunte_smallcaps($chunk);
    }
  }

  $content = join('', $content_split);

  return $content;
}

--- /code ---

with your original ckunte_smallcaps function.

Explanations:

We split everything on html tags (the (<[^>]+>) regexp) so
<anytag stuff="this">some text inside tags</anytag>
becomes
array('<anytag stuff="this">', 'some text inside tags', '</anytag>');

Then for each of this array items, if it's not a tag (ie first char is not 
"<") we're passing them through your smallcap function

At the end, glue everything back and return

Still not perfect because you won't want to deal with what's within 
<script> and </script>, or <style> and </style> for instance.

Hope that helps.


Ozh
-- 
http://planetozh.com/




More information about the wp-hackers mailing list