使用本函式处理后的字串会沿续到PHP程式而转入eval函数
html码放在数据库里,通过php文件调用,经过一系列处理后,用eval函数
将希望的变量带入生成所需要的动态页.这样,我就没再看vbb源码,而转入eval函数了.
星空浪子的php中文手册是这样介绍eval函数的:
函式:eval()
杂项函式库
eval
将值代入字串之中。
语法:void eval(string code_str);
传回值:无
函式种类:资料处理
内容说明
本函式可将字串之中的变数值代入,通常用在处理资料库的资料上。参数code_str
为欲处理的字串。值得注意的是待处理的字串要符合PHP的字串格式,同时在结尾
处要有分号。使用本函式处理后的字串会沿续到PHP程式结束。
使用范例
<?php
$string='杯子';
$name='咖啡';
$str='这个$string中装有$name.<br>';
echo$str;
eval("\$str=\"$str\";");
echo$str;
?>
本例的传回值为
这个$string中装有$name.
这个杯子中装有咖啡.
例子测试没有任何问题.可是,当我测试如下代码时,却出现了错误:
<?
$aa='my name is yyy!';
$str='<input type="text"name="textfield"value="$aa">';
eval("\$str=\"$str\";");
echo$str;
?>
百思不得其解后,在chainasp上求救,在网友提出的一系列解决方案
中,终于以这种方式运行成功:
<?
$aa='my name is yyy!';
$str='<input type="text"name="textfield"value="\'$aa\'">';
eval("\$str=\"$str\";");
echo$str;
?>
可是,当我把$str插入如下一个表中然后又提取出时,又出错了,简直恼火
死了.
数据库evaltest
#表结构'envtest'
CREATE TABLE envtest(
id tinyint(4)NOT NULL auto_increment,
sour mediumtext,
PRIMARY KEY(id),
UNIQUE id(id),
KEY id_2(id)
);
#表内容'envtest'
INSERT INTO envtest VALUES('1','<input type=\"text\"name=\"textfield\"value=\"$aa\">');
php文件如下:
<?
$aa='my name is yyy!';
$conn=mysql_connect('localhost','root','');
$sele='select sour from envtest where id=1';
$res=mysql_db_query('evaltest',$sele);
$arra=mysql_fetch_array($res);
$str=$arra['sour'];
eval("echo\"$str\";");
?>
再看看星空浪子的php中文手册,发现这么一句话:"待处理的字串要符合PHP的字串格式",什么叫
"符合PHP的字串格式"(有谁知道,麻烦告诉一声)?我不知道,也无从查找,只好看看字串处理函数.
发现htmlspecialchars()好像可用,于是试了一把:
<?
$aa='my name is yyy!';
$conn=mysql_connect('localhost','root','');
$sele='select sour from envtest where id=1';
$res=mysql_db_query('evaltest',$sele);
$arra=mysql_fetch_array($res);
$str=htmlspecialchars($arra['sour']);
eval("echo\"$str\";");
?>
可是在页面上显示是这样的:
<input type="text"name="textfield"value="my name is yyy!">
变量带入成功,可显示不符合要求.察看文件源码,内容如下:
<input type="text"name="textfield"value="my&bsp name&bsp is yyy!">
再看看手册的htmlspecialchars()的用法,发现此函数对字串作了如下操作:
&(和)转成&
"(双引号)转成"
<(小于)转成<
>(大于)转成>
再查找,没发现与此函数作用相反的函数,于是,自己加了几行代码,再作如下调试,终于成功.
<?php
function dehtml($str){
$str=str_replace('"','"',$str);
$str=str_replace('<','<',$str);
$str=str_replace('>','>',$str);
$str=str_replace('&','&',$str);
return$str;
}
$aa='2881064151my name is yyy!';
$conn=mysql_connect('localhost','root','');
$sele='select sour from envtest where id=1';
$res=mysql_db_query('evaltest',$sele);
$arra=mysql_fetch_array($res);
$str=HTMLSpecialChars($arra['sour']);
eval("echo dehtml(\"$str\");");
?>
在这个代码调试成功后,我又把一个内容复杂的html页面的源码加入一变量后插入到evaltest表中,
再次测试,也成功了.
有关eval函数用法里的"待处理的字串要符合PHP的字串格式",我想是经过
HTMLSpecialChars()函数处理过的字串吧,不知正确与否
使用本函式处理后的字串会沿续到PHP程式而转入eval函数的更多相关文章
- 学JS的心路历程-函式(六)其余参数及预设参数
今天我们要来介绍ES6新增的其余参数及预设参数! 其余参数rest parameter …numbers可以让我们表示不确定数量的参数,并将其视为一个数组: function getVal(…numb ...
- 学JS的心路历程-函式(五)箭头函式
箭头函式arrow function 为了能够以更简短的方式建立函式,ES6变推出了箭头函式. 用说明的可能会不太懂,我们先拿之前的数组排序例子来看: var arr = [2,1,6,12,3,77 ...
- 学JS的心路历程-函式(二)arguments
参数(argument)与函式参数(parameter) 在讨论函式时,很多人都会把这两个搞混,我自己也不例外. 虽然讲错别人也听得懂,但是我们还是要搞清楚这两个的定义到底是什么! 参数是当我们呼叫函 ...
- 学习JS的心路历程-函式(一)
前几天有间单提到该如何声明函式及在Hositing中会发生什么事,但是函式的奥妙不仅于此. 身为一个使用JS的工程师,我们一定要熟悉函式到比恋人还熟! 这几天将会把函式逐一扒开跟各位一起探讨其中的奥妙 ...
- Linux学习-函式库管理
动态与静态函式库 首先我们要知道的是,函式库的类型有哪些?依据函式库被使用的类型而分为两大类,分别是静态 (Static) 与动态 (Dynamic) 函式库两类. 静态函式库的特色: 扩展名:(扩展 ...
- 可爱的Python_课后习题_CDay−3 通过函式进行功能化
1. 读取某一简单索引文件cdays−3-test.txt,其每行格式为:文档序号关键词,现须根据这些信息将它转化为倒排索引,即统计关键词在哪些文档中,格式如下:包含该关键词的文档数关键词 => ...
- JavaScript中的內定物件與函式: arguments, callee, caller, this, apply(), call()
arguments, caller, callee, this都是用在函式(function)內的特殊內定物件.而apply()及call()則是用來呼叫函式的不同作法. arguments可用來取得 ...
- C++ 檔案、資料夾、路徑處理函式庫:boost::filesystem
原帖:https://tokyo.zxproxy.com/browse.php?u=uG7kXsFlW1ZmaxKEvCzu8HrCJ0bXIAddA1s5dtIUZ%2FYzM1u9JI7jjKLT ...
- Android studio: 自 maven 增加一個函式庫
在 android studio 裏要加入一個 3rd party 的 library 其實不是很麻煩, 祇是現在沒有 UI, 所以需要一些手動作業.看來 google 很看好 android stu ...
随机推荐
- 手动构建Servlet项目的流程
前面讨论过手动建立jsp的项目,jsp是tomcat服务器负责编译执行,所以配置相对简单,而Servlet需要先把java源文件编译成字节码class文件,然后再执行,所以需要servlet-api. ...
- BestCoder13 1001.Beautiful Palindrome Number(hdu 5062) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5062 题目意思:给出 N,找出 1 - 10^N 中满足 Beautiful Palindrome N ...
- ubuntu 图形界面查看隐藏文件
在 Linux 下以 . 开头的文件或文件夹为隐藏文件,在图形界面(nautilus)下可用 CTRL + H 显示隐藏文件,终端下者可以用 ls -a 显示所有文件.
- 如何用OpenCV自带的adaboost程序训练并检测目标
参考博文: 1.http://blog.csdn.net/wuxiaoyao12/article/details/39227189 2.http://www.cnblogs.com/easymind2 ...
- Nginx与Redis解决高并发问题
原文链接:http://bbs.phpchina.com/forum.php?mod=viewthread&tid=229629 第一版产品采用的是Jquery,Nginx,PHP(CI框架) ...
- 菜鸟学Linux命令:grep配合ls等使用
linux grep命令 (global search regular expression(RE) and print out the line )是一种强大的文本搜索工具,它能使用正则表达式搜索文 ...
- 使用jQuery简单实现产品展示的图片左右滚动功能
今天要做一个产品展示功能,由于产品比较多,一屏展示不完,所以想要做一个通过点击进行翻页的效果,在网上找了几个都不大好用,最后只能自己动手写了. 效果如下所示: 原理比较简单:将要滚动显示的区域的CSS ...
- hdu 1754 单点更新
题意:很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感.不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师 ...
- ava中Class.forName的作用浅谈
转自:http://www.jb51.net/article/42648.htm Class.forName(xxx.xx.xx) 返回的是一个类 一.首先你要明白在java里面任何class都要装载 ...
- android自动更新程序,安装完以后就什么都没有了,没有出现安装成功的界面的问题
转载自: http://blog.csdn.net/lovexieyuan520/article/details/9250099 在android软件开发中,总是需要更新版本,所以当有新版本开发的时候 ...