Solved

deprecated preg replace

Posted on 2013-06-06
10
372 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 74

Expert Comment

by:käµfm³d 👽
Comment Utility
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 108

Expert Comment

by:Ray Paseur
Comment Utility
Maybe try removing the e ?  Why did you have the e modifier there?
0
 
LVL 74

Expert Comment

by:käµfm³d 👽
Comment Utility
@Ray_Paseur

My guess is so that the replacement code (i.e. the isset stuff) would execute as PHP code  ; )
0
 
LVL 108

Expert Comment

by:Ray Paseur
Comment Utility
@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
Comment Utility
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
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 74

Assisted Solution

by:käµfm³d 👽
käµfm³d   👽 earned 125 total points
Comment Utility
@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 108

Assisted Solution

by:Ray Paseur
Ray Paseur earned 125 total points
Comment Utility
@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 108

Expert Comment

by:Ray Paseur
Comment Utility
@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
Comment Utility
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
Comment Utility
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

Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

Join & Write a Comment

I imagine that there are some, like me, who require a way of getting currency exchange rates for implementation in web project from time to time, so I thought I would share a solution that I have developed for this purpose. It turns out that Yaho…
Developers of all skill levels should learn to use current best practices when developing websites. However many developers, new and old, fall into the trap of using deprecated features because this is what so many tutorials and books tell them to u…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to count occurrences of each item in an array.

744 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

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now