如果在服务器上关闭魔术引号,wordpress会怎么做?

时间:2013-05-25 10:31:42

标签: wordpress stripslashes

我们最近升级到php 5.4.15,默认情况下它没有魔术引号。是时候了:))

但事实证明,由于内部兼容性原因,wp正在为POST和所有内容添加自己的斜杠。

现在有很多插件,我有一些明智的功能,如果它们被php添加就会删除斜线:​​

function POSTGET_stripslashes_all($forced=false)
    {
    if(!get_magic_quotes_gpc() and !get_magic_quotes_runtime()) if(!$forced) return;
    ....

但无论php设置如何,wp都会添加斜杠,所以无论任何设置,我最终都会删除斜线。问题是,如果用户想在其输入中使用文字斜杠,该怎么办?

如何为此带来一些感觉?我不想总是删除斜杠。你是怎么做到的?在谈到wp时,你只是放弃并剥离一切吗?是否有一个很好的经验法则,说wp在哪里和哪里都可以斜线?

1 个答案:

答案 0 :(得分:3)

好吧,我必须找到自己的答案。

file: wp-settings.php > function wp_magic_quotes() is called. 
  • 运行wp时几乎包含此文件,wp-config.php无条件地包含此文件。
  • 函数调用几乎在所有事情之前,
  • 但是在advanced-cache.php之后调用
  • 动作之后挂钩do_action('plugins_loaded')。

功能本身:

function wp_magic_quotes() (is in file wp-includes/load.php) 
     {
     if(get_magic_quotes_gpc()) strip_slashes()
     adds slashes to POST, GET, COOKIES and SERVER, using add_magic_quotes()
     }

因此,如果您需要决定是否删除斜杠,请使用:

if(!get_magic_quotes_gpc() and !function_exists('wp_magic_quotes')) do_not_strip;

这是完整的表格功能:

function POSTGET_stripslashes_all($forced=false)
    {
    global $POSTGET_stripslashes_all_done;
    if(!get_magic_quotes_gpc() and !function_exists('wp_magic_quotes')) if(!$forced) return;//wp check
    if($POSTGET_stripslashes_all_done) return;
    //stripslashes
    if(is_array($_POST))    $_POST=POSTGET_stripslashes_deep($_POST,$forced);
    if(is_array($_GET)) $_GET=POSTGET_stripslashes_deep($_GET,$forced);
    if(is_array($_REQUEST)) $_REQUEST=POSTGET_stripslashes_deep($_REQUEST,$forced);
    $POSTGET_stripslashes_all_done=true;
    }



function POSTGET_stripslashes_deep($value,$forced=false)
    {
    global $POSTGET_stripslashes_all_done;
    if(!get_magic_quotes_gpc() and !function_exists('wp_magic_quotes')) if(!$forced) return $value;
    if($POSTGET_stripslashes_all_done) if(!$forced) return $value;
    if(is_string($value)) return  stripslashes($value);
    if(is_array($value))
        foreach($value as $name=>$val)
            $value[$name]=POSTGET_stripslashes_deep($val,$forced);
    return $value;
    }