PHP,怎样解析内含php命令的字符串?

数据库读取出一段字符串,里面有<?phpecho$_SESSION['xxx'];?>的一段,请问如何才能把这些命令再次解析,形成不含命令的纯文本?------不要说st... 数据库读取出一段字符串,里面有<? php echo $_SESSION['xxx']; ?>的一段,请问如何才能把这些命令再次解析,形成不含命令的纯文本?
------ 不要说str_replace这种原始的方法--------
------ 不要说这种操作很危险,没办法--------
[例子]
成功从数据库取出以下字符串,需要将<? php echo $_SESSION['name']; ?>解析变成"张三",再echo这句话到页面。
$str_from_db = 'Hello, my name is <? php echo $_SESSION['name']; ?>.';
解析为$str_from_db = 'Hello, my name is 张三.';
-----------------------
麻烦大神!
展开
 我来答
卢国栋G
推荐于2016-04-18 · 知道合伙人软件行家
卢国栋G
知道合伙人软件行家
采纳数:2206 获赞数:4767
中山大学网络工程专业,网络行业3年从业经验,经验丰富!

向TA提问 私信TA
展开全部
思路是正则匹配到<?php ?>标签,将里面的具体代码通过eval执行,然后前后的字符串输出,再返回
例如:
<?php
session_start();
$_SESSION['age'] = 18;
function initStr($str) {
$pattern = '/^(.*)\<\?php(.*)\?\>(.*)$/isU';
<a href="https://www.baidu.com/s?wd=preg_match&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YLuj01PjN-nW6YuH0YP1uB0AP8IA3qPjfsn1bkrjKxmLKz0ZNzUjdCIZwsrBtEXh9GuA7EQhF9pywdQhPEUiqkIyN1IA-EUBtYPHf3PWfLnHmkn1nYnWndnWR" target="_blank" class="baidu-highlight">preg_match</a>($pattern, $str, $match);
ob_start();
echo $match[1];
eval($match[2]);
echo $match[3];
$return = ob_get_contents();
ob_end_clean();
return $return;
}
$ori_str = 'My age is <?php echo $_SESSION["age"]; ?>, how about you?';
$str = initStr($ori_str);
echo $str;
?>
cyan24
推荐于2016-06-21 · TA获得超过1626个赞
知道小有建树答主
回答量:1128
采纳率:0%
帮助的人:865万
展开全部
<?php
session_start();
$_SESSION['age'] = 18;
function initStr($str) {
    $pattern = '/^(.*)\<\?php(.*)\?\>(.*)$/isU';
    preg_match($pattern, $str, $match);
    ob_start();
    echo $match[1];
    eval($match[2]);
    echo $match[3];
    $return = ob_get_contents();
    ob_end_clean();
    return $return;
}
$ori_str = 'My age is <?php echo $_SESSION["age"]; ?>, how about you?';
$str = initStr($ori_str);
echo $str;

你测试一下,思路是正则匹配到<?php ?>标签,将里面的具体代码通过eval执行,然后前后的字符串输出,再返回,我本地试了下,效果是OK的,

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友cb4985820
2014-02-28 · TA获得超过562个赞
知道小有建树答主
回答量:250
采纳率:0%
帮助的人:229万
展开全部
写入临时文件,然后再include 临时文件,然后就搞定咯
更多追问追答
追问
不行。
这主意是不错,不过有点麻烦,而且,字符串不是全部都是php代码,有的是普通文本,这样include会悲剧的。
谢谢你的意见!
追答
直接将 字符串写成php文件,再include啊,不会有什么问题,倒是 正则匹配,如果含有多个php代码片段,就不好输出咯
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
新加坡百晓生
2014-02-28 · TA获得超过270个赞
知道答主
回答量:113
采纳率:0%
帮助的人:81万
展开全部
没看明白
$str_from_db = 'Hello, my name is'. $_SESSION['name'];
echo $str_from_db;
不知理解的对不对
追问
不是的,意思是:
$_SESSION['age'] = 18;
$ori_str = 'My age is , how about you?';
$str_i_need = 'My age is 18, how about you?';

怎么从$ori_str解析到$str_i_need
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦中的小人国
2014-02-28 · 超过11用户采纳过TA的回答
知道答主
回答量:74
采纳率:100%
帮助的人:15.4万
展开全部
直接就能解析啊...
更多追问追答
追问
帅哥,不行啊,
原字符串 "my number is ."
我要的是 "my number is 20."

直接echo是"my number is ."
追答
你是不是在php页面输出的啊?如果是?>这样的格式貌似不能输出啊,你要把外面的那层剥掉
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式