使用href属性时正确(且安全)转义url的方法

时间:2016-03-29 作者:Kailo

也许这并不像我想的那么重要,但我想用一些文本来转义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,在我看来,这比第一个更安全。

谢谢

1 个回复
最合适的回答,由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\' ) );
它确保所有标记内容都被正确转义,所有文本都可以翻译,同时确保字符串的两个部分的灵活性。然而,它仍然有点取决于具体情况。

相关推荐

Altered Media Library URLs

我有一个客户的网站,是在他们离开另一家代理机构后我找到的。该机构使用了一个专有主题和自己的自托管页面生成器,以防止其在除他们之外的任何其他托管环境中更新或编辑。它的另一个方面是重新映射主题的URL并上载目录。因此,例如,代替WP在中查找主题文件http://domain.com/wp-content/themes/…. 它在里面找他们http://domain.com/t/….同样,对于图像上载,也可以在http://domain.com/wp-content/uploads/…, 它在里面找他们http