Re: eregi sentence
| From: | Ivan Fomichev | Date: | Sun, 30 Nov 2003 16:56:59 +0000 |
| Subject: | Re: eregi sentence | ||
| References: | 1 | Groups: | php.db |
| Request: | Send a blank email to php-db+get-31819@lists.php.net to get a copy of this message | ||
Hello Nikos,
Sunday, November 30, 2003, 10:29:19 AM, you wrote:
NG> Can somebody tell me what is wrong with the following?
NG> $body=eregi_replace("<a href=\"(.+)\"([^>]*)>(.+)</a>",
NG> "<a href=\"\\1\"
NG> target=\"_blank\"
NG> class=\"down_txt\"><strong>\\3</strong></a>", $body);
1) /.+/ is too greedy. You should use something like /[^"]+/ or /.+?/ instead
(second is supported only in Perl-compatible regexps). The best solution
could be /[^'"]+?/ however.
2) /<a / doesn't match "\n" after "a".
$body = preg_replace(
'#<[Aa]\s[^>]*?[Hh][Rr][Ee][Ff]\s*=\s*([\'"])([^\'">]+?)\1[^>]*?>'
.
'([^<]*?)</a[^>]*?>#s',
'<A href="\2" target="_blank"
class="down_txt">' .
'<strong>\3</strong></a>',
$body
);
This regexp is not perfect, but I hope it has enough margin of safety, at
least if your HTML code is more or less correct. E. g., all href values
must be quoted and '<', '>', '"' and "'"
without special meaning must be
written as HTML entities.
--
Best regards,
Ivan mailto:johnny@net.frn.ru