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 张三.';
-----------------------
麻烦大神! 展开
------ 不要说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 张三.';
-----------------------
麻烦大神! 展开
5个回答
推荐于2016-04-18 · 知道合伙人软件行家
关注
展开全部
思路是正则匹配到<?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;
?>
例如:
<?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;
?>
展开全部
<?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的,
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
写入临时文件,然后再include 临时文件,然后就搞定咯
更多追问追答
追问
不行。
这主意是不错,不过有点麻烦,而且,字符串不是全部都是php代码,有的是普通文本,这样include会悲剧的。
谢谢你的意见!
追答
直接将 字符串写成php文件,再include啊,不会有什么问题,倒是 正则匹配,如果含有多个php代码片段,就不好输出咯
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没看明白
$str_from_db = 'Hello, my name is'. $_SESSION['name'];
echo $str_from_db;
不知理解的对不对
$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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接就能解析啊...
更多追问追答
追问
帅哥,不行啊,
原字符串 "my number is ."
我要的是 "my number is 20."
直接echo是"my number is ."
追答
你是不是在php页面输出的啊?如果是?>这样的格式貌似不能输出啊,你要把外面的那层剥掉
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询