PHP 5.5로 업그레이드 한 후 웹 사이트, 상점 또는 상점보기를 추가 할 때 다음 오류가 발생합니다. 이 버그는 여전히 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}
이것은 오류를 일으키는 코드입니다
코드는 다음에서 찾을 수 있습니다 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);
}
내 생각에 이것은 방법에 대한 가장 쉬운 패치입니다.
/**
* 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);
}
이 방법은에 의해서만 사용됩니다 Mage_Adminhtml_System_StoreController::storeAction()
.
이 문제를 해결할 수있는 장소는 세 가지가 있습니다.
- Mage_Core_Helper_Abstract => 메소드가있는 곳이지만 코어 파일을 만지기 때문에 짜증납니다.
- Mage_Core_Helper_Abstract => 다시 작성하십시오. 추상 클래스이므로 다시 작성할 수 없습니다.
- Mage_Adminhtml_Helper_Data를 다시 작성하고 거기에 메소드를 추가하십시오. => 나는 이것이 갈 길이라고 생각합니다.
너희들은 어떻게 생각하니?
- 옵션 # 3이 문제를 해결하는 올바른 방법입니까?
- 패치의 코드가 정확합니까?
1.9.1 CE 및 1.14.1 EE 문제