意外的esc_html和esc_attr行为

时间:2016-03-17 作者:Michael

在我的网站的搜索结果页面上,我输出的搜索词如下:

<?php echo esc_html($_GET[\'s\']); ?>
对于搜索词“search-term”(包括引号),我希望它在源代码中显示为:

&quot;SEARCH-TERM&quot;
但来源实际包含的内容是:

\\"SEARCH-TERM\\"
在页面上显示为“SEARCH-TERM”。

我还输出搜索词,如下所示:

<input type="search" value="<?php echo esc_attr($_GET[\'s\']); ?>">
这在源文件中显示为:

<input type="search" value="\\"SEARCH-TERM\\"">
当用户查看时,在输入框中实际显示为“SEARCH-TERM”。

搜索词在URL中显示为%22SEARCH-term%22,我认为这是搜索短语的正确URL表示形式。

我很难理解为什么在使用esc_htmlesc_attr.

如有任何见解,将不胜感激。

我正在运行WordPress版本4.4.2。

1 个回复
最合适的回答,由SO网友:Milo 整理而成

使用get_search_querythe_search_query 要将搜索项作为正确转义值返回/输出,请不要访问$_GET 直接地您正试图逃避已被URL编码的内容。

相关推荐

nothing happen in search form

我想创建搜索表单,但当我搜索时什么都没有发生,这是代码:索引。php: <div class=\"tech-btm\"> <?php get_search_form();?> </div> 搜索表单:<form role=\"search\" method=\"get\" id=\"searchform\" action=\"<?php echo home_url(\'/\')?>\"> &