首頁 >後端開發 >php教程 >如何安全地將 PHP 已棄用的 `preg_replace()` `/e` 修飾符替換為 `preg_replace_callback()`?

如何安全地將 PHP 已棄用的 `preg_replace()` `/e` 修飾符替換為 `preg_replace_callback()`?

Susan Sarandon
Susan Sarandon原創
2024-12-19 12:15:16490瀏覽

How to Safely Replace PHP's Deprecated `preg_replace()` `/e` Modifier with `preg_replace_callback()`?

用preg_replace_callback() 取代preg_replace() 的'/e' 修飾符

正規表示式可能會令人生畏,尤其是在使用捕獲組和替換替換時。讓我們使用'/e' 修飾符來破解preg_replace() 的替換任務:

public static function camelize($word) {
   return preg_replace('/(^|_)([a-z])/e', 'strtoupper("\2")', $word);
}

這裡,目標是將'^' (字符串開頭)或'_' (字符串開頭)後面的字母大寫(底線)。

理解 '/e' 修飾符

'/e' 修飾符將替換字串計算為 PHP 程式碼。 「2」指的是第二個捕獲組,即「^」或「_」後面的小寫字母。然而,出於安全原因,此修飾符已被棄用。

過渡到preg_replace_callback()

preg_replace_callback() 透過提供回呼函數而不是替換字串提供了更安全的替代方案:

return preg_replace_callback('/(^|_)([a-z])/', function($matches) {
    return strtoupper($matches[2]);
}, $word);

>

匿名函數接受一個匹配數組作為參數。這裡,$matches[1] 代表“^”或“_”,$matches[2] 代表要大寫的字母。

互換模式

注意「/e」使用 preg_replace_callback() 時需要刪除修飾符。上述模式簡化為:

return preg_replace_callback('/(^|_)([a-z])/', function($matches) {
    return strtoupper($matches[2]);
}, $word);
變數作用域

匿名函數只能存取使用 'use' 關鍵字明確匯入的變數。

陷阱

    '/e' 修飾符會從參數中刪除斜杠,這與preg_replace_callback()。
  • 「use」關鍵字允許將變數匯入回調中,解決變數範圍問題。

以上是如何安全地將 PHP 已棄用的 `preg_replace()` `/e` 修飾符替換為 `preg_replace_callback()`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn