为什么不是在每个有翻译的文本上都使用esc_html_()(在第二十一章)?

时间:2021-09-15 作者:PhpDoe

为什么,在register_nav_menus() 函数(来自二十二个函数.php),我们是否发现esc_html__() 在主菜单上but not on secondary menu, 如下所示:

    register_nav_menus(
        array(
            \'primary\' => esc_html__( \'Primary menu\', \'twentytwentyone\' ),
            \'footer\'  => __( \'Secondary menu\', \'twentytwentyone\' ),
        )
    );
我理解esc\\u html()”的意思;检索$文本的翻译并将其转义,以便在HTML输出中安全使用;,正如WordPress codex中所解释的,但为什么它被用在第一个菜单上而不是第二个菜单上,这是我无法理解的。

是否有我遗漏的特定规则?

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

简单的答案似乎是人为错误。Originally, 在开发过程中,221有一个菜单,注册如下:

\'primary\' => __( \'Primary Navigation\', \'twentytwentyone\' ),
然后有人went through and added escaping 对许多人来说__() 贯穿主题,导致:

\'primary\' => esc_html__( \'Primary Navigation\', \'twentytwentyone\' ),
然后,后来,a second menu was added, 像这样:

\'primary\' => esc_html__( \'Primary Navigation\', \'twentytwentyone\' ),
\'footer\'  => __( \'Footer Navigation\', \'twentytwentyone\' ),
似乎没有人注意到这种差异。

人们通常认为最好是逃避。”;“迟交”;,如中所述this WordPress VIP article. 也就是说,尽可能接近输出。因此,需要注意的是,这些行没有输出任何内容。他们只是定义稍后要输出的字符串<然而,这是WordPress输出这些值的地方:

<label for="locations-<?php echo esc_attr( $location ); ?>"><?php echo $description; ?></label>
请注意$description, 它是菜单名,不是转义的。因此,由于编辑WordPress核心不是一个选项,因此在注册菜单名称时将其转义为最佳实践。

因此,应该转义次菜单。对是吗?没有,为什么?人为错误。

相关推荐

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