也许这并不像我想的那么重要,但我想用一些文本来转义href属性。这些例子中哪一个是“正确的”,这是否真的很重要?
<?php printf( esc_html__( \'%1$s and %2$s.\', \'theme_name\' ), \'One\', \'<a href="http://example.com/">Two</a>\' ); ?>
<?php printf( __(\'One and <a href="%1$s" class="class">%2$s</a>.\', \'theme_name\'), esc_url( __( \'http://example.com/\' ) ), esc_html__( \'Two\' ) ); ?>
我这样问是因为第二个是使用esc\\U url作为url,在我看来,这比第一个更安全。
谢谢
最合适的回答,由SO网友:engelen 整理而成
在将数据输出到浏览器之前使用转义可以确保不会将恶意(外部)内容(您无法控制)输出到浏览器,并且HTML标记中不会出现错误。此外,可以对已翻译的字符串进行转义,以确保其翻译没有未转义的特殊字符。
在您的情况下,您提供的第二个选项比第一个更好。而不是转义整个HTML并将A
-标记,您可以假设您自己已正确格式化A
-标记并转义内容。然而,一般来说,你不必申请__()
指向URL,因为它实际上没有翻译(如果您硬编码了指向多语言网站的链接,则除外,但这不太可能;-)。最好的方法是:
printf( __( \'One and <a href="%1$s">%2$s</a>.\', \'theme_name\'), esc_url( \'http://example.com/\' ), __( \'Two\' ) );
它确保所有标记内容都被正确转义,所有文本都可以翻译,同时确保字符串的两个部分的灵活性。然而,它仍然有点取决于具体情况。