Solved

deprecated preg replace

Posted on 2013-06-06
10
379 Views
Last Modified: 2013-06-06
hello,
how can I fix this error

Deprecated: preg_replace(): The /e modifier is deprecated

return preg_replace('~\{\$(\w+)\}~ie', "isset(\$args['\\1']) ? \$args['\\1'] : '\\0'", $cdata);
0
Comment
Question by:XK8ER
  • 4
  • 3
  • 2
  • +1
10 Comments
 
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 39227168
Is it me, or are you missing a parameter on your preg_replace call? Is $cdata the replacement, or is it the thing being searched within?
0
 
LVL 109

Expert Comment

by:Ray Paseur
ID: 39227202
Maybe try removing the e ?  Why did you have the e modifier there?
0
 
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 39227209
@Ray_Paseur

My guess is so that the replacement code (i.e. the isset stuff) would execute as PHP code  ; )
0
Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 109

Expert Comment

by:Ray Paseur
ID: 39227216
@kaufmed: Here is what I think the statement says:
$rgx = '~\{\$(\w+)\}~ie';
$txt = "isset(\$args['\\1']) ? \$args['\\1'] : '\\0'";
$new = preg_replace($rgx, $txt, $cdata);
return $new;

Open in new window

Looks like a regex is being used to put a regex into some other string of data.  What that doesn't explain is that the deprecation occurs as of PHP 5.5, however PHP 5.5 is not supported yet - it's a release candidate not to be used in production.
http://php.net/manual/en/function.preg-replace.php
0
 
LVL 35

Assisted Solution

by:Terry Woods
Terry Woods earned 125 total points
ID: 39227226
I think this is the equivalent without using the deprecated e modifier:

$pattern = '~\{\$(\w+)\}~i';
$replacement = isset($args['1']) ? $args['1'] : '0';
return preg_replace($pattern, $replacement, $cdata);

Open in new window

0
 
LVL 75

Assisted Solution

by:käµfm³d 👽
käµfm³d   👽 earned 125 total points
ID: 39227228
@Ray_Paseur

Without the "e" modifier, I would agree with you. However, my understanding of the "e" modifier is that it forces the replacement to be treated as executable code. It's all a matter of XK8ER telling us what the intended goal is.
0
 
LVL 109

Assisted Solution

by:Ray Paseur
Ray Paseur earned 125 total points
ID: 39227235
@XK8ER: "Deprecated" is not an error; it's just a message indicating that at some time in the future, there may be a removal or change of functionality.  You can suppress the message giving you a while to figure out a permanent solution.  Add the @ to the front of the function name in the call or set error_reporting(^E_DEPRECATED).
0
 
LVL 109

Expert Comment

by:Ray Paseur
ID: 39227239
@kaufmed: Agreed.  It would be nice to see the test data and the expected output.  And in any case, PHP offers a solution.
http://php.net/manual/en/function.preg-replace-callback.php
0
 
LVL 35

Expert Comment

by:Terry Woods
ID: 39227248
Interesting discussion, and I'm glad you mentioned preg_replace_callback Ray! In this case it doesn't seem to be necessary as far as I can tell.
0
 
LVL 82

Accepted Solution

by:
hielo earned 125 total points
ID: 39227252
Try:
preg_replace_callback('~\{\$(\w+)\}~i',function($matches){
	global $args;
	return isset($args[$matches[1]]) ? $args[$matches[1]]: $matches[0];
},$cdata);

Open in new window

0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
How is this connection happening? 3 20
Wordpress Security 29 48
PHP Mail error 3 27
Showing multiple maps using PHP and Google Maps 8 20
Introduction HTML checkboxes provide the perfect way for a web developer to receive client input when the client's options might be none, one or many.  But the PHP code for processing the checkboxes can be confusing at first.  What if a checkbox is…
Author Note: Since this E-E article was originally written, years ago, formal testing has come into common use in the world of PHP.  PHPUnit (http://en.wikipedia.org/wiki/PHPUnit) and similar technologies have enjoyed wide adoption, making it possib…
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

838 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question