php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #13559 parser misinterprets ?> in a regexp
Submitted: 2001-10-05 05:50 UTC Modified: 2001-10-09 16:59 UTC
From: cech at debian dot org Assigned:
Status: Not a bug Package: PCRE related
PHP Version: 4.0.6 OS: Debian
Private report: No CVE-ID: None
 [2001-10-05 05:50 UTC] cech at debian dot org
From Debian bug #114345
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=114345&repeatmerged=yes

When presented with a perfectly valid regular expression that contains ?> in
it, these characters are confused with those used to close a block of php code
in the html file. 

Example:

   // $article = preg_replace("/<([^>]*)(\s+[^>]*)?>/s",
   //                        '',
   //                        $article);


    Even though this entire block is commented out, I still get a parse error due to the ?> in the regexp. 

    The workaround seems to be use of the x modifier, and putting whitespace between the ? and >, like so...

$article = preg_replace("/<([^>]*)(\s+[^>]*)? >/xs",

    Mike

----------
P.S. cannot there be a mail reportin interface?

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-10-09 14:47 UTC] sander@php.net
Intended behaviour.
From the docs (http://www.php.net/manual/en/language.basic-syntax.comments.php):
"The 'one-line' comment styles actually only comment to the end of the line or the current block of PHP code, whichever comes first."
 [2001-10-09 16:59 UTC] jeroen@php.net
And

$article = preg_replace("/<([^>]*)(\s+[^>]*)?>/xs",

goes perfectly right, as it should.

KISS example:

$myvar = "ab?>cd";

should work (and does work). Inside strings everything is allowed, when you place // before the line, that string protection obviously doesn't work anymore.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Apr 25 21:01:36 2024 UTC