Кавычки экранируются, когда magic_quotes_gpc выключен - PullRequest
2 голосов
/ 09 августа 2011

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 ]

4 голосов
/ 10 августа 2011

РЕДАКТИРОВАТЬ: я понял проблему.Оказывается, у 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 );*/
}
0 голосов
/ 29 ноября 2014

Вверху 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 удалит эту функциональность в ближайшее время.

...