Help with PHP: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

thenelson
thenelson used Ask the Experts™
on
When I upgrade PHP on my webserver from version 5.4 to 5.6, I get:
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home3/thenelson/public_html/barnwellmd/secure/Services/Twilio/Resource.php on line 90

Here is the code around line 90:
/**
     * Return camelized version of a word
     * Examples: sms_messages => SMSMessages, calls => Calls, 
     * incoming_phone_numbers => IncomingPhoneNumbers
     *
     * @param string $word The word to camelize
     * @return string
     */
    public static function camelize($word) {
        return preg_replace('/(^|_)([a-z])/e', 'strtoupper("\\2")', $word);
    }

Open in new window

I went online and read about the /e modifier and preg_replace_callback and I am a bit lost. What does the /e modifier do? Can I just remove the /e modifier from preg_replace? Can I change preg_replace to preg_replace_callback, remove the /e modifier or do I need to do more?

Thanks.
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Analyst Developer
Distinguished Expert 2018
Commented:
Hi @thenelson,

The e modifier is a deprecated regex modifier which allows you to use PHP code within your regular expression. This means that whatever you parse in will be evaluated as a part of your program. It was deprecated for security reasons, take a look at :

http://php.net/manual/en/reference.pcre.pattern.modifiers.php

Anyway, your function body could be replaced by :

return  str_replace('_', '', ucwords($word, "_"));

Open in new window


The use of ucwords will uppercase the first character of each word in your string then str_replace function will replace all occurrences of the underscores '_' in your string $word.
Quite strange: I changed the code to:
    public static function camelize($word) {
        //return preg_replace('/(^|_)([a-z])/e', 'strtoupper("\\2")', $word);
		return  str_replace('_', '', ucwords($word, "_"));
    }

Open in new window

and uploaded the new Resource.php to my webserver but when I upgrade my PHP to version 5.6, I still get the exact same message.

None of the PHP scripts I have on my webserver reference Resource.php so I am guessing the code in Resource.php is being called by twillio.com which is processing some of the code.  I sent an email asking them about that.

Thanks for your help. I'll let you know what I find out.
Zakaria AcharkiAnalyst Developer
Distinguished Expert 2018

Commented:
You're welcome, Yes that strange make sure all goes right from your side and we hope they will answer quickly.
The problem preg_replace() code runs off the twilio.com website. Twilio has upgraded code. I am communicating with them to switch to it.

Thanks for your input.
Zakaria AcharkiAnalyst Developer
Distinguished Expert 2018

Commented:
You're welcome, glad to help.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial