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函数的更多相关文章

  1. 学JS的心路历程-函式(六)其余参数及预设参数

    今天我们要来介绍ES6新增的其余参数及预设参数! 其余参数rest parameter …numbers可以让我们表示不确定数量的参数,并将其视为一个数组: function getVal(…numb ...

  2. 学JS的心路历程-函式(五)箭头函式

    箭头函式arrow function 为了能够以更简短的方式建立函式,ES6变推出了箭头函式. 用说明的可能会不太懂,我们先拿之前的数组排序例子来看: var arr = [2,1,6,12,3,77 ...

  3. 学JS的心路历程-函式(二)arguments

    参数(argument)与函式参数(parameter) 在讨论函式时,很多人都会把这两个搞混,我自己也不例外. 虽然讲错别人也听得懂,但是我们还是要搞清楚这两个的定义到底是什么! 参数是当我们呼叫函 ...

  4. 学习JS的心路历程-函式(一)

    前几天有间单提到该如何声明函式及在Hositing中会发生什么事,但是函式的奥妙不仅于此. 身为一个使用JS的工程师,我们一定要熟悉函式到比恋人还熟! 这几天将会把函式逐一扒开跟各位一起探讨其中的奥妙 ...

  5. Linux学习-函式库管理

    动态与静态函式库 首先我们要知道的是,函式库的类型有哪些?依据函式库被使用的类型而分为两大类,分别是静态 (Static) 与动态 (Dynamic) 函式库两类. 静态函式库的特色: 扩展名:(扩展 ...

  6. 可爱的Python_课后习题_CDay−3 通过函式进行功能化

    1. 读取某一简单索引文件cdays−3-test.txt,其每行格式为:文档序号关键词,现须根据这些信息将它转化为倒排索引,即统计关键词在哪些文档中,格式如下:包含该关键词的文档数关键词 => ...

  7. JavaScript中的內定物件與函式: arguments, callee, caller, this, apply(), call()

    arguments, caller, callee, this都是用在函式(function)內的特殊內定物件.而apply()及call()則是用來呼叫函式的不同作法. arguments可用來取得 ...

  8. C++ 檔案、資料夾、路徑處理函式庫:boost::filesystem

    原帖:https://tokyo.zxproxy.com/browse.php?u=uG7kXsFlW1ZmaxKEvCzu8HrCJ0bXIAddA1s5dtIUZ%2FYzM1u9JI7jjKLT ...

  9. Android studio: 自 maven 增加一個函式庫

    在 android studio 裏要加入一個 3rd party 的 library 其實不是很麻煩, 祇是現在沒有 UI, 所以需要一些手動作業.看來 google 很看好 android stu ...

随机推荐

  1. codeforces 374A Inna and Pink Pony 解题报告

    题目链接:http://codeforces.com/problemset/problem/374/A 题目意思:给出一个 n 行  m 列 的棋盘,要将放置在坐标点为(i, j)的 candy 移动 ...

  2. XP下使用IIS访问asp出现无权查看网页问题的解决办法

    这是用户权限问题,因为你用的磁盘是NTFS格式. 解决方法: 一.添加用户(“Everyone”或者“IUSR_你的机器名”,如IUSR_HONG,即“Internet 来宾用户”) 二.修改用户权限 ...

  3. 越狱后想禁用Spotlight

    如果你的是ios7越狱后不想用Spotlight搜索功能,大老板源的NoSpot ios7可轻松帮你实现.亲测可用……………………

  4. Java并发编程:Synchronized及其实现原理

    Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) Java 并发编程 ...

  5. 在iOS开发中,给项目添加新的.framework

    首先需要了解一下iOS中静态库和动态库.framework的概念 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我 ...

  6. express再学习

    对比spring,django,再学习express就有很多共通的地方啦... 看的书是一本小书,<express in action>,排版比较好. 昨天开始看,看了快四分之一啦... ...

  7. Android_就像小朋友“搭积木”一样。

    就像小朋友“搭积木”一样.感觉这句话很有意思.完整的话是这样的: Android提供了大量功能丰富的UI组件,开发者只要按一定规律把这些UI组件组合起来 --就像小朋友“搭积木”一样,把这些UI组件搭 ...

  8. vb.net三层实现登录例子

    看三层已经很长时间了,中间有经过了期末考试.回家等等琐事,寒假开学的我已经回想不起什么事三层了,经过了三四天的重新复习,再加上查看各期师哥师姐的博客,终于,自己完成了C#视频中的登录小例子,下面就和大 ...

  9. Linux下配置java的环境变量,So Easy!!

    首先,在cd /usr ,mkdir java. 将java安装包放到/usr/java,并解压. 验证java. $ java -version 如果提示有如下安装包包含它,但是没有安装.是环境变量 ...

  10. JavaScript案例二:在末尾添加节点

    简单实现通过JavaScript来增加HTML节点 <!DOCTYPE html> <html> <head> <title>JavaScript在末尾 ...