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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: cech at debian dot org
New email:
PHP Version: OS:

 

 [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

Pull Requests

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: Sun Dec 22 11:01:30 2024 UTC