Кавычки экранируются, когда magic_quotes_gpc выключен
Magento избегает апострофов, когда magic_quotes_gpc
установлен в off
, Когда я установил magic_quotes_gpc
в on
, Magento перестает вставлять косые черты. Это полностью назад.
Я не могу, чтобы Magento избежал моих апострофов, но я также не хочу иметь magic_quotes_gpc
установлен в on
потому что я обеспокоен последствиями, которые это может иметь для других частей моего сайта (форум vBulletin, блог Wordpress и т. д.).
Просто чтобы заметить - Magento не всегда так себя вел, он только начался сегодня.
РЕДАКТИРОВАТЬ: поведение началось после добавления следующего кода в XML обновления макета одной из моих страниц CMS:
<!--<reference name="content">
<block type="catalog/product_new" name="home.catalog.product.new" alias="product_new" template="catalog/product/new.phtml" after="cms_page"><action method="addPriceBlockType"><type>bundle</type><block>bundle/catalog_product_price</block><template>bundle/catalog/product/price.phtml</template></action></block>
<block type="reports/product_viewed" name="home.reports.product.viewed" alias="product_viewed" template="reports/home_product_viewed.phtml" after="product_new"><action method="addPriceBlockType"><type>bundle</type><block>bundle/catalog_product_price</block><template>bundle/catalog/product/price.phtml</template></action></block>
<block type="reports/product_compared" name="home.reports.product.compared" template="reports/home_product_compared.phtml" after="product_viewed"><action method="addPriceBlockType"><type>bundle</type><block>bundle/catalog_product_price</block><template>bundle/catalog/product/price.phtml</template></action></block>
</reference>
<reference name="right">
<action method="unsetChild"><alias>right.reports.product.viewed</alias></action>
<action method="unsetChild"><alias>right.reports.product.compared</alias></action>
</reference>-->
После того, как началось странное поведение, я удалил этот код, но это не решило проблему.
2 ответа
РЕДАКТИРОВАТЬ: я понял проблему. Оказывается, у Wordpress есть своя собственная функция для добавления в слэши. Начиная с версии Wordpress 3.2.1, вы можете найти функцию wp_magic_quotes()
вокруг строки 530 из /wp-includes/load.php
Чтобы исправить проблему, я закомментировал все внутри функции (не самой функции, чтобы предотвратить вызов неопределенной функции). Устранена проблема с кавычками. Я не проводил подробного тестирования, но насколько я понимаю, это может сломать старые плагины Wordpress, поэтому будьте осторожны.
Это пойдет из этого:
function wp_magic_quotes() {
// If already slashed, strip.
if ( get_magic_quotes_gpc() ) {
$_GET = stripslashes_deep( $_GET );
$_POST = stripslashes_deep( $_POST );
$_COOKIE = stripslashes_deep( $_COOKIE );
}
// Escape with wpdb.
$_GET = add_magic_quotes( $_GET );
$_POST = add_magic_quotes( $_POST );
$_COOKIE = add_magic_quotes( $_COOKIE );
$_SERVER = add_magic_quotes( $_SERVER );
// Force REQUEST to be GET + POST.
$_REQUEST = array_merge( $_GET, $_POST );
}
к этому:
function wp_magic_quotes() {
// If already slashed, strip.
/*if ( get_magic_quotes_gpc() ) {
$_GET = stripslashes_deep( $_GET );
$_POST = stripslashes_deep( $_POST );
$_COOKIE = stripslashes_deep( $_COOKIE );
}
// Escape with wpdb.
$_GET = add_magic_quotes( $_GET );
$_POST = add_magic_quotes( $_POST );
$_COOKIE = add_magic_quotes( $_COOKIE );
$_SERVER = add_magic_quotes( $_SERVER );
// Force REQUEST to be GET + POST.
$_REQUEST = array_merge( $_GET, $_POST );*/
}
В верхней части app/code/core/Mage/Core/functions.php есть это:
if (get_magic_quotes_gpc()) {
function mageUndoMagicQuotes($array, $topLevel=true) {
$newArray = array();
foreach($array as $key => $value) {
if (!$topLevel) {
$newKey = stripslashes($key);
if ($newKey!==$key) {
unset($array[$key]);
}
$key = $newKey;
}
$newArray[$key] = is_array($value) ? mageUndoMagicQuotes($value, false) : stripslashes($value);
}
return $newArray;
}
$_GET = mageUndoMagicQuotes($_GET);
$_POST = mageUndoMagicQuotes($_POST);
$_COOKIE = mageUndoMagicQuotes($_COOKIE);
$_REQUEST = mageUndoMagicQuotes($_REQUEST);
}
Просто скопируйте этот файл в локальный (app / code / local / Mage / Core / functions.php) и закомментируйте оператор if, чтобы он всегда работал.
// if (get_magic_quotes_gpc()) {
function mageUndoMagicQuotes($array, $topLevel=true) {
$newArray = array();
foreach($array as $key => $value) {
if (!$topLevel) {
$newKey = stripslashes($key);
if ($newKey!==$key) {
unset($array[$key]);
}
$key = $newKey;
}
$newArray[$key] = is_array($value) ? mageUndoMagicQuotes($value, false) : stripslashes($value);
}
return $newArray;
}
$_GET = mageUndoMagicQuotes($_GET);
$_POST = mageUndoMagicQuotes($_POST);
$_COOKIE = mageUndoMagicQuotes($_COOKIE);
$_REQUEST = mageUndoMagicQuotes($_REQUEST);
// }
Это необходимо, потому что WordPress проверяет, отключены ли магические кавычки, и если это так, то все равно запускает магические кавычки. Существуют длительные дискуссии о том, должно ли это произойти, но единодушное мнение о том, что функциональность может открыть дыры в безопасности в старых плагинах или темах, которые не работают вокруг него, поэтому не ждите, что WordPress удалит эту функциональность в ближайшее время.