PHP如何正确显示存储在MySQL中的HTML+PHP混合代码
问题原因
你当前直接通过print输出数据库中读取的内容时,PHP解释器仅会解析当前PHP文件内的原生代码,不会处理字符串内容中包裹的<?php ?>标签,这些标签会原样输出到浏览器,浏览器无法识别<??>格式的标签,会自动将其转换为注释内容,最终导致页面布局错乱。
方案1:快速实现(仅适合内容完全可控的场景)
可以用eval()函数让PHP解析字符串中的PHP代码,修改page.php中输出内容的代码即可:
<div id="row"> <?php // 拼接?> 是为了退出当前PHP解析模式,让eval识别字符串中的<?php标签 eval('?>' . $page['page_content']); ?> </div>
风险警告:
eval()会执行传入内容中的所有PHP代码,如果你的CMS存在用户可编辑内容的入口,恶意用户可以提交恶意代码直接控制服务器,该方案仅可用于存储内容100%由你自己可控、无第三方用户输入的场景。
方案2:CMS系统规范实现方案(推荐)
主流CMS都不会直接存储可执行的PHP代码,而是采用自定义模板标签替换的方案,完全规避代码注入风险:
- 把存储在MySQL中的动态逻辑部分改成自定义短标签,比如原PHP代码可以改成:
<h3>MY HEADER TEXT</h3> {if $sp_msg} <div>{$sp_msg}</div> {/if} <hr> <p>paragraph text</p>
- 写一个简单的标签解析函数,输出内容前遍历替换这些自定义标签为实际内容,不需要执行任何PHP代码,安全性高,扩展性强,后续可以自行扩展更多标签支持其他动态逻辑。
内容的提问来源于stack exchange,提问作者ToddN
相关产品推荐
相关产品推荐

