WordPress esc_attr返回空字符串

问题描述 投票:0回答:2

我有一个输入名称=“title”的表单,在functions.php中,我只是从该表单中获取所有数据

这是代码:

$title = $_POST['title'];
print_r($_POST);
var_dump($title);
var_dump(esc_attr($title));

预期的结果将是相同的字符串,但是,我不知道为什么,WordPress在esc_attr上显示一个空字符串

这是输出:

Array ( [title] => Swedish House Mafia – Doooon\'t You Worry Child ft. John Martin )

string(63) "Swedish House Mafia – Doooon\'t You Worry Child ft. John Martin" 

string(0) "" 

它与被称为title的输入字段或被称为$title的变量无关,并且与WordPress中的其他内容冲突,我不知道为什么转义函数不起作用。

php wordpress escaping
2个回答
0
投票

让我们来看看可能是这个问题的贡献者的思维过程。

使用所显示的代码,代码中的任何内容都不会影响变量或$_POST。您只是一个接一个地回显每个变量(如上所示)。

这意味着与esc_attr有些不和。可能性是什么:

  1. 该功能尚不可用。
  2. 有些东西会覆盖返回的值和行为。

可能性1是不可行的,因为您正在使用主题的function.php文件。 WordPress在调用主题时加载了转义函数。要检查,你可以这样做:

echo function_exists( 'esc_attr' ) ? 'yes, loaded' : 'whoops, not loaded';

这让我们看到了可能性2.让我们来看看WordPress Core中的函数。

function esc_attr( $text ) {
    $safe_text = wp_check_invalid_utf8( $text );
    $safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
    /**
     * Filters a string cleaned and escaped for output in an HTML attribute.
     *
     * Text passed to esc_attr() is stripped of invalid or special characters
     * before output.
     *
     * @since 2.0.6
     *
     * @param string $safe_text The text after it has been escaped.
     * @param string $text      The text prior to being escaped.
     */
    return apply_filters( 'attribute_escape', $safe_text, $text );
}

有3个与文本交互的功能。我在前两个看不到任何东西。但是,请查看过滤器事件attribute_escape。任何其他插件或主题都可以注册到该事件并更改返回的文本,包括返回空字符串。

这听起来像是一个非常可能的候选人。

下一步

当文本通过esc_attr()时,正在踩踏(过滤)文本。您需要消除所有变量,将站点剥离到基本的基础,然后查看问题是否自行解决。

以下步骤是发现问题所在的过程。这是一种消除方法。当您浏览它时,它将帮助您确定哪些组件(主题,插件,甚至核心)正在影响它。

  1. 第1步:停用所有插件
  2. 第2步:将代码移动到主题qazxsw poi文件的顶部。为什么?当qazxsw poi文件首先加载时,它会消除主题中的任何内容影响文本。
  3. 第3步:手动将标题添加到functions.php。作为functions.php的第一行:$_POST['title']
  4. 第4步:刷新浏览器。

它是否正常工作,意味着functions.php返回字符串?

Nope, the problem is still happening.

嗯,这意味着在WordPress Core中的东西并不好玩。您可以通过深入研究Core并找出导致冲突的原因进行调查。或者重新加载它的新版本。

Yes, the problem is gone

一次添加一个插件。刷新浏览器。检查问题是否再次出现。如果是,那么您找到了导致它的插件。

Now what?

找到罪魁祸首后,您可以采取措施解决问题。然后你可以删除我添加的$_POST['title'] = "Swedish House Mafia – Doooon't You Worry Child ft. John Martin";文件中的代码。


-2
投票

使用此代码检索数据

esc_attr()
© www.soinside.com 2019 - 2024. All rights reserved.