Sau khi chúng tôi nâng cấp lên PHP 5.5, chúng tôi gặp lỗi sau khi thêm Trang web, Cửa hàng hoặc Cửa hàng. Lỗi này vẫn còn trong Magento 1.9.0.1
Exception message: Deprecated functionality: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in app/code/core/Mage/Core/Helper/Abstract.php on line 238
Trace: #0 [internal function]: mageCoreErrorHandler(8192, 'preg_replace():...', 'app...', 238, Array)
#1 app/code/core/Mage/Core/Helper/Abstract.php(238): preg_replace('# <(?![/a-z]) |...', 'htmlentities('$...', 'New Store Name')
#2 app/code/core/Mage/Adminhtml/controllers/System/StoreController.php(175): Mage_Core_Helper_Abstract->removeTags('New Store Name')
#3 app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Adminhtml_System_StoreController->saveAction()
#4 app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('save')
#5 app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#6 app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#7 app/Mage.php(686): Mage_Core_Model_App->run(Array)
#8 index.php(87): Mage::run('', 'store')
#9 {main}
Đây là mã tạo ra lỗi
Mã có thể được tìm thấy trong Mage_Core_Helper_Abstract
/**
* Remove html tags, but leave "<" and ">" signs
*
* @param string $html
* @return string
*/
public function removeTags($html)
{
$html = preg_replace("# <(?![/a-z]) | (?<=\s)>(?![a-z]) #exi", "htmlentities('$0')", $html);
$html = strip_tags($html);
return htmlspecialchars_decode($html);
}
Theo tôi, đây là bản vá dễ nhất cho phương thức:
/**
* Remove html tags, but leave "<" and ">" signs
*
* @param string $html
* @return string
*/
public function removeTags($html)
{
$html = preg_replace_callback("# <(?![/a-z]) | (?<=\s)>(?![a-z]) #xi",
create_function('$matches', 'return htmlentities($matches);'),
$html
);
$html = strip_tags($html);
return htmlspecialchars_decode($html);
}
Phương pháp chỉ được sử dụng bởi Mage_Adminhtml_System_StoreController::storeAction()
.
Có ba nơi có thể sửa nó:
- Mage_Core_Helper_Abauge => đó là nơi đặt phương thức, nhưng nó hút vì nó chạm vào một tệp cốt lõi.
- Viết lại Mage_Core_Helper_Abauge => nó là một lớp trừu tượng, vì vậy nó không nên / không thể viết lại.
- Viết lại Mage_Adminhtml_Helper_Data và thêm phương thức vào đó. => Tôi nghĩ rằng đây là con đường để đi.
các bạn nghĩ sao?
- Là lựa chọn số 3 là cách chính xác để khắc phục vấn đề.
- Là mã trong bản vá của tôi chính xác?