Après avoir mis à niveau vers PHP 5.5, nous obtenons l'erreur suivante lors de l'ajout d'un site Web, d'un magasin ou d'une vue de magasin. Ce bug est toujours présent dans 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}
C'est le code qui produit l'erreur
Le code se trouve dans 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);
}
C'est, à mon avis, le patch le plus simple pour la méthode:
/**
* 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);
}
La méthode n'est utilisée que par le Mage_Adminhtml_System_StoreController::storeAction()
.
Il y a trois endroits possibles pour le réparer:
- Mage_Core_Helper_Abstract => c'est là que se trouve la méthode, mais elle craint car elle touche un fichier core.
- Réécrire Mage_Core_Helper_Abstract => c'est une classe abstraite, donc elle ne doit pas / ne peut pas être réécrite.
- Réécrivez Mage_Adminhtml_Helper_Data et ajoutez-y la méthode. => Je pense que c'est la voie à suivre.
Qu'en pensez-vous?
- L'option # 3 est-elle la bonne façon de résoudre le problème.
- Le code de mon patch est-il correct?