如何在wp_kses中允许尖括号<和>,避免CSS代码转义?
解决wp_kses保留CSS中尖括号的问题
wp_kses默认会转义HTML特殊字符(包括<和>),因为它的核心作用是过滤不安全的HTML内容。但如果你的CSS代码中需要保留这些符号,可以通过以下几种方式处理:
方法一:使用safe_style_css过滤器修正转义后的字符
wp_kses在处理style属性时会调用safe_style_css过滤器,你可以通过这个钩子把转义后的<和>转回到原始的尖括号:
// 添加过滤器处理CSS内容 add_filter('safe_style_css', 'restore_css_angles', 10, 1); function restore_css_angles($css_content) { // 将转义后的尖括号还原 $css_content = str_replace('<', '<', $css_content); $css_content = str_replace('>', '>', $css_content); return $css_content; } // 定义允许的HTML标签(根据你的需求调整) $allowed_tags = array( 'div' => array( 'style' => array(), ), 'p' => array( 'style' => array(), ), // 其他需要允许的标签及属性 ); // 运行wp_kses过滤 $filtered_content = wp_kses($your_content_with_css, $allowed_tags);
方法二:临时替换占位符绕过转义
如果不想添加全局过滤器,可以先将尖括号替换为唯一占位符,经过wp_kses过滤后再替换回来:
// 用占位符替换尖括号 $temp_content = str_replace('<', '__CSS_LT__', $your_content_with_css); $temp_content = str_replace('>', '__CSS_GT__', $temp_content); // 定义允许的标签 $allowed_tags = array( 'div' => array('style' => array()), // 其他标签 ); // 执行过滤 $filtered_content = wp_kses($temp_content, $allowed_tags); // 替换回原始尖括号 $filtered_content = str_replace('__CSS_LT__', '<', $filtered_content); $filtered_content = str_replace('__CSS_GT__', '>', $filtered_content);
注意事项
- 确保你只在可信的内容上使用这些方法,wp_kses的转义机制是为了防止XSS攻击,随意绕过可能带来安全风险。
- 如果是处理内联CSS,尽量只允许必要的CSS属性,避免引入不安全的样式(比如
position: fixed配合恶意内容)。
内容的提问来源于stack exchange,提问作者Dhiraj
相关产品推荐
相关产品推荐

