Nach dem Upgrade auf PHP 5.5 wird beim Hinzufügen einer Website, eines Geschäfts oder einer Geschäftsansicht die folgende Fehlermeldung angezeigt. Dieser Fehler ist in Magento 1.9.0.1 immer noch vorhanden
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}
Dies ist der Code, der den Fehler erzeugt
Den Code finden Sie in 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);
}
Dies ist meiner Meinung nach der einfachste Patch für die Methode:
/**
* 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);
}
Die Methode wird nur von der Mage_Adminhtml_System_StoreController::storeAction()
.
Es gibt drei mögliche Stellen, um das Problem zu beheben:
- Mage_Core_Helper_Abstract => hier befindet sich die Methode, aber sie ist nicht gut, weil sie eine Kerndatei berührt.
- Schreibe Mage_Core_Helper_Abstract um => es ist eine abstrakte Klasse, daher sollte / kann sie nicht umgeschrieben werden.
- Schreiben Sie Mage_Adminhtml_Helper_Data neu und fügen Sie die Methode dort hinzu. => Ich denke, das ist der richtige Weg.
Was denkt ihr?
- Ist Option 3 der richtige Weg, um das Problem zu beheben.
- Ist der Code in meinem Patch korrekt?