是否清理包含引号的输出?

时间:2016-08-25 作者:dingo_d

我有一个变量,它从主题设置(如背景图像等)中提取数据,并将其存储在一个单独的文件中style 例如:

$style = \'style="\'.$background_image.$background_color.\'"\';
The$background_image$background_color 只是css值background_imagebackground_color 可以在选项中设置。

我在标题中使用这个变量,如下所示

<header id="header" class="myheader" <?php echo $style; ?>>
现在这是不安全的,应该进行消毒,所以我补充道esc_attr() 以转义该属性。

<header id="header" class="myheader" <?php echo esc_attr( $style ); ?>>
这反过来又使我的双引号变成&quot; 当然,这种风格行不通。现在我可以htmlspecialchars_decode() 关于逃逸值,但这似乎。。。古怪的

另一个解决方案是style 直接放在标题中,只放转义值,这将解决双引号问题,但如果没有设置样式,则留下一个空的style 在我看来,这似乎也有点不必要。

最好的解决方案是什么?

如果我使用htmlspecialchars_decode() 我仍然得到一个关于转义函数的phpcs错误,这是非常恼人的。。。

2 个回复
SO网友:birgire

另一种解决方案是将样式直接放在标题中,只放转义值,这将解决双引号问题,但如果没有设置样式,我的元素中只剩下一个空样式,这似乎也有点不必要。

你可以退房wp_add_inline_style 并且仅当存在非空的CSS主题设置值时才添加样式。

SO网友:Oleksa O.

处理属性清理(任何包含引号的属性)的正确方法是使用wp_kses() 作用在您的具体情况下,结果如下所示:

<header id="header" class="myheader" <?php echo wp_kses( $style, array(\'style\' => array()) ); ?>>

相关推荐

Need a help on sanitization

我在评论中有一个主题,我确实在像这样的少数情况下添加了“type”=>“select”部分。$wp_customize->add_setting( \'personal_lite_post_link\', array( \'default\' => \'enable\', \'sanitize_callback\' => \'personal_lite_select_callback\' ) ); $w