如何安全地转义标题属性

时间:2019-02-05 作者:klewis

我正在接受一些关于国际化和数据转义的培训。但我觉得我必须摆脱标题属性。我在助手函数中有以下代码。。。

   echo \'<h2 class="m-title">\';
    printf(
        esc_html__(\'%s\',\'tn\'),
            \'<a href="\'.esc_url(get_permalink()).\'" title="\'.the_title_attribute().\'">
            \'. esc_html(get_the_title()).\'
            </a> 
        \'
    );
    echo \'</h2>\';
除了title属性外,它似乎一切正常。输出如下。。。。

Hello world! Hello world!
因为DOM正在加载以下内容:

<h2 class="m-title">
  Hello world!
  <a href="http://local.dev.site/mysite/?p=26" title="">
  Hello world!
  </a> 
</h2>
我打电话错在哪里the_title_attribute()? According to the docs, 它已经逃走了。

谢谢你的提示!

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

一些屏幕阅读器会阅读标题属性和链接文本,这样访问者就会听到“Hello world!Hello world!”因此,除非您的真实标题属性与链接文本不同,并为屏幕阅读器的用户提供额外的上下文,否则您可能希望不要使用标题属性。

或者,你应该能够重写所有内容,这样你就不用重复

<?php // your other code here ?>
<h2 class="m-title">
    <a href="<?php echo esc_url(get_permalink()); ?>" title="<?php the_title_attribute(); ?>">
        <?php the_title(); ?>
    </a>
</h2>
通过这种方式,您可以混合HTML和PHP,但它允许您立即输出两者,因此the_title_attribute() 正在正确的位置输出,而不是在解析所有其他内容之前。您可以添加其他esc_html__() 调用包装在每一组PHP标记中,但不清楚为什么像这样的字段需要这些标记the_permalink().

SO网友:klewis

我只是想补充一些我在使用the_title_attribute. 有$args 这是可以应用的。因此,如果返回标题,可以简单地将echo设置为false,就像这样。。。

    echo \'<h2 class="m-title">\';
    printf(
        esc_html__(\'%s\',\'tn\'),
            \'<a href="\'.esc_url(get_permalink()).\'" title="\'.the_title_attribute([\'echo\' => false]).\'">
            \'. esc_html(get_the_title()).\'
            </a> 
            \'
    );
    echo \'</h2>\';
这是我最初寻找的,但我感觉在通过esc_html__(), 简单地重复标题会更有意义,如所选答案所示。

相关推荐

Disable escaping html

我在用SyntaxHighlighter Evolved 突出显示代码示例。E、 g。[csharp] string s = \"text\"; List<int> numbers = new List<int>(); [/csharp] 当我第一次保存它时,没关系,但编辑wordpress时,文本会更改为[csharp] string s = &quot;text&quot;; List&lt;int&am