Bug #12477 Updated: preg_replace evaluates dollar signs as variables (eg $1,000 becomes ,000)

From: Date: Mon, 06 Aug 2001 21:26:23 +0000
Subject: Bug #12477 Updated: preg_replace evaluates dollar signs as variables (eg $1,000 becomes ,000)
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-62353@lists.php.net to get a copy of this message
ID: 12477
Updated by: andy
Reported By: Grant.Walters@walters.co.nz
Old Status: Closed
Status: Open
Old Bug Type: PCRE related
Bug Type: Feature/Change Request
Operating System: Linux and SCO
PHP Version: 4.0.6
New Comment:

reopened and reclassified as a feature request.

Previous Comments:
------------------------------------------------------------------------

[2001-08-06 17:26:15] andrei@php.net

If you don't want to use \n or $n substitution, then maybe you are better off using
str_replace()?

------------------------------------------------------------------------

[2001-08-06 17:24:10] Grant.Walters@walters.co.nz

Is it possible to ask that the this be included as a new feature?

A switch to tell the PCRE engine? to ignore variable substitution?

It would make things a lot easier, I think.

Thanks

------------------------------------------------------------------------

[2001-08-06 12:49:00] andrei@php.net

That's right, you need to escape $ in your replacement strings.

------------------------------------------------------------------------

[2001-07-31 00:40:54] Grant.Walters@walters.co.nz

The setup for my templating system:

$template=array(
  "/({PAGETOP})/",
  "/({PAGENAVBAR})/",
  "/({PAGEMAIN})/",
  "/({PAGELINKS})/",
  "/({PAGESPACE})/",
  "/({PAGETEXT})/",
  "/({PAGENEWS})/",
  "/({PAGEBOTTOM})/",
  "/({PAGEDATA})/"
  );

$pagevars=array(
  "PAGETOP" => get_page($site->page_top),
  "PAGENAVBAR" => get_page($site->page_top),
  "PAGEMAIN" => get_page($site->page_main),
  "PAGELINKS" => get_page($site->page_links),,
  "PAGESPACE" => get_page($site->page_space),
  "PAGETEXT" => get_page($site->page_text),
  "PAGENEWS" => get_page($site->page_news),,
  "PAGEBOTTOM" => get_page($site->page_bottom),
  "PAGEDATA" => ""
  );

$page = "{PAGETOP}{PAGENAVBAR}{PAGEMAIN}{PAGEBOTTOM}";

$page = preg_replace($template,$pagevars,$page);

echo $page;

Basically each physical page referenced via the get_page function is a text template that may
contain HTML, text or variables in the form {VAR}.

Eventually content from a database ends up in a variable called PAGEDATA which is in the template
stored in the page main variable.

The problem:

PAGEDATA ends up containing page text and it has something like "would cost around $16,000 to
complete" in that text.

When the preg_replace is performed, something somewhere is assuming that $16 is a variable (which
doesn't exist) and the text ends up as "would cost around ,000 to complete"




------------------------------------------------------------------------



Edit this bug report at http://bugs.php.net/?id=12477&edit=1



Thread (9 messages)

« previous php.dev (#62353) next »