PHP输出Base64图片时src中丢失data:前缀问题求助
WordPress/WooCommerce购物车页面Base64图片丢失"data:"前缀的解决方法
问题现象
在购物车页面通过PHP输出Base64格式图片时,img标签的src属性会丢失开头的data:前缀,导致图片无法正常显示;但单独echo该Base64字符串时,能完整输出包含data:前缀的内容。
解决方法
方法1:使用wp_kses_post输出完整标签
WordPress的wp_kses_post函数会保留合法的HTML结构与属性值,不会错误过滤data URI的前缀:
$img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAImCAYAAACrXu7BAAAgAE................"; echo wp_kses_post('<img src="' . $img . '" />');
方法2:手动用esc_attr转义属性值
手动对Base64字符串做属性转义,确保data:前缀被正确保留:
$img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAImCAYAAACrXu7BAAAgAE................"; echo '<img src="' . esc_attr($img) . '" />';
方法3:排查第三方过滤钩子
若以上方法无效,大概率是主题或插件的自定义过滤规则导致前缀被移除:
- 临时禁用所有插件,切换到WordPress默认主题(如Twenty Twenty-Four)测试,确认是否为第三方代码问题。
- 检查主题
functions.php或插件代码中是否存在wp_kses_allowed_html、esc_attr相关的过滤函数,这类函数可能修改了属性值的允许规则。
内容的提问来源于stack exchange,提问作者daniel ochr
相关产品推荐
相关产品推荐

