PHP输出数据库存储的HTML代码不解析,直接打印源码求助
解决HTML实体无法渲染为标签的问题
你碰到的这个问题很常见——数据库里存的是转义后的HTML实体(比如<b>),直接输出的话浏览器会把它当成纯文本,而不是解析成对应的<b>标签。下面给你两个解决方案,还附带安全提醒:
1. 反转义HTML实体
PHP自带的htmlspecialchars_decode()函数可以把这些转义后的实体还原成原本的HTML标签,直接在输出时调用就行:
<div style="overflow: auto;width: 100%" align="left"> <?php echo htmlspecialchars_decode($getlistingdata->ldesctiption); ?> </div>
如果发现一次反转义不够(比如内容被多次转义过),可以多调用几次这个函数,比如htmlspecialchars_decode(htmlspecialchars_decode($getlistingdata->ldesctiption))。
2. 安全过滤(重要!)
如果这些内容是用户提交的(比如评论、用户描述),直接解析HTML可能会有XSS攻击风险。建议先用strip_tags()过滤掉危险标签,只保留你允许的标签,比如只保留<b>:
<?php // 先反转义,再过滤标签,只允许<b> $safeDescription = strip_tags(htmlspecialchars_decode($getlistingdata->ldesctiption), '<b>'); ?> <div style="overflow: auto;width: 100%" align="left"> <?php echo $safeDescription; ?> </div>
为什么会出现这个问题?
大概率是你在把内容存入数据库时,用了htmlspecialchars()或者类似的转义函数,把HTML标签转换成了实体(防止SQL注入或者破坏页面结构),但取出的时候没有做对应的反转义操作,导致浏览器无法识别这些标签。
内容的提问来源于stack exchange,提问作者Mad Coder
相关产品推荐
相关产品推荐

