在AJAX终结点中编码代码片段

时间:2018-05-01 作者:Joshua Wilkeson

我一直在寻找方法来做到这一点,这就是我目前所拥有的。正如你所看到的,我已经尝试了很多事情,我四处看看,这类问题的所有答案都是关于如何启用执行,而不是禁用它,如果可能的话,我希望不必使用插件。这里不显示pre和code标记,但您会看到,在这之前和之后都有pre、code和textarea readonly=“readonly”标记。我还尝试使用esc\\U html,但没有成功。


    
    esc_html(add_action('wp_ajax_nopriv_mytheme_more_post_ajax', 'mytheme_more_post_ajax');
    add_action('wp_ajax_mytheme_more_post_ajax', 'mytheme_more_post_ajax');
    $t = 0;
    if (!function_exists('mytheme_more_post_ajax')) {
        function mytheme_more_post_ajax(){

$ppp = (isset($_POST[&#39;ppp&#39;])) ? $_POST[&#39;ppp&#39;] : 3; $cat = (isset($_POST[&#39;cat&#39;])) ? $_POST[&#39;cat&#39;] : &#39;&#39;; $offset = (isset($_POST[&#39;offset&#39;])) ? $_POST[&#39;offset&#39;] : 0; $post_type = (isset($_POST[&#39;post_type&#39;])) ? $_POST[&#39;post_type&#39;] : &#39;&#39;; $args = array( &#39;post_type&#39; =&gt; $post_type, &#39;posts_per_page&#39; =&gt; $ppp, &#39;post_status&#39; =&gt; &#39;publish&#39;, &#39;post__not_in&#39; =&gt; $do_not_duplicate, &#39;cat&#39; =&gt; $cat, &#39;offset&#39; =&gt; $offset, ); $loop = new WP_Query($args); $out = &#39;&#39;; if ($loop -&gt; have_posts()) : while ($loop -&gt; have_posts()) : $loop -&gt; the_post(); $category_out = array(); $categories = get_the_category(); foreach ($categories as $category_one) { $category_out[] =&#39;&lt;a href=&quot;&#39;.esc_url( get_category_link( $category_one-&gt;term_id ) ).&#39;&quot; class=&quot;&#39;.strtolower($category_one-&gt;name).&#39;&quot;&gt;&#39; .$category_one-&gt;name.&#39;&lt;/a&gt;&#39;; } $category_out = implode(&#39;, &#39;, $category_out); $cat_out = (!empty($categories)) ? &#39;&lt;span class=&quot;cat-links&quot;&gt;&lt;span class=&quot;screen-reader-text&quot;&gt;&#39;.esc_html__(&#39;Categories&#39;, &#39;creativesfeed&#39;).&#39;&lt;/span&gt;&#39;.$category_out.&#39;&lt;/span&gt;&#39; : &#39;&#39;; $id = get_the_ID(); if ($t == 2) : $out .= &#39;&lt;div class=&quot;col-md-4 col-sm-12&quot;&gt; &lt;div class=&quot;adinspire&quot;&gt; &lt;/div&gt; &lt;/div&gt;&#39;; elseif ($t == 5) : $out .= &#39;&lt;div class=&quot;col-sm-12&quot;&gt; &lt;div class=&quot;adlong2&quot;&gt; &lt;/div&gt; &lt;/div&gt;&#39;; endif; if ($t == 9 || $t == 16) : $out .= &#39;&lt;div class=&quot;col-md-4 col-sm-12&quot;&gt;&#39;; else : $out .= &#39;&lt;div class=&quot;col-md-4 col-sm-6&quot;&gt;&#39;; endif; $out .= &#39;&lt;div class=&quot;squarepost hvrlines&quot;&gt; &lt;div class=&quot;noflow&quot;&gt;&#39;; $out .= &#39;&lt;a class=&quot;postLink&quot; href=&quot;&#39;.esc_url(get_permalink()).&#39;&quot; aria-hidden=&quot;true&quot; style=&quot;opacity: 1;&quot;&gt;&#39;; $out .= srcset_post_thumbnail(); $out .= &#39;&lt;/a&gt;&#39;; $out .= &#39;&lt;/div&gt; &lt;h4 class=&quot;info&quot;&gt;&lt;span&gt;&#39;.print_categories().&#39;&lt;/span&gt;&lt;/h4&gt; &lt;h2 class=&quot;head3&quot;&gt;&lt;a&gt;&#39;.get_the_title().&#39;&lt;/h2&gt; &lt;p class=&quot;smallp&quot;&gt;By: &#39;.get_field(&#39;design_company&#39;, $id).&#39;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt;&#39;; $t ; endwhile; endif; wp_reset_postdata(); wp_die($out); } })</code></pre></textarea>

2 个回复
SO网友:Tom J Nowell

我认为你的答案是关于逃跑而不是处决,例如:

    Why does this text appear bold  
与之相比:

    <b>Why does this text appear bold</b>  
问题在于逃逸,但首先,请注意:

称之为Execution的问题是Execution这个词用错了,这就是为什么你的google搜索没有产生结果。这里没有执行PHP。相反,您的浏览器返回HTML标记,并且浏览器正在显示它。您想要的是显示一个代码段,而不将其显示为真正的HTML。因此,问题是转义/编码,而不是执行,如果称之为执行,人们会感到困惑。

执行意味着代码在运行,这里没有代码在运行。

esc_html 函数的工作原理esc_html( <code goes here>), 这不是函数的工作方式。esc_html 不是像if语句或while循环那样包装东西的神奇修饰符,它不是语言构造,而是函数。

函数获取某个对象,对该对象进行处理,然后返回它。

function func ( $in ) {
    return \'output\';
}
$in = \'input\';
$out = func( $in );
echo $out; // output
esc_html 是一个转义函数。它接受不安全的输入,进行转义,然后返回。

E、 g。

echo esc_html( \'<script>dangerous();</script>\');
在HTML源中输出:

&lt;script&gt;dangerous();&lt;/script&gt;
将在浏览器中呈现为可读字符串,如下所示:

<script>dangerous();</script>
针对您的情况

$out = \'unescaped html code with no html entities\';
echo esc_html( $out );
此外,您可能希望研究其他代码的其他转义函数,作为安全措施。

SO网友:Joshua Wilkeson

我发现解决方案是,我在帖子的上面有一个html元素,但没有转义,因此php附加到该元素并显示帖子。

结束

相关推荐

在发送到options.php之前分析表单值

我正在开发一个自定义插件,它需要为远程API输入身份验证数据,并且需要保存这些数据。我想在保存到db之前对其进行加密。我添加了一个设置页面,其中包含:<form method=\"post\" action=\"options.php\"> <!-- form fields here... --> </form> 而不是将每个选项保存为{wp_table_prefix}_options 表中,我希望它们仅保存为一行中的对象,因此name 属