PHP面试题
smarty 原理
Smarty是一个模板引擎,主要是为了使业务逻辑与视图分离。如果不用Smarty,则视图中会嵌套很多PHP逻辑代码,显得比较混乱。
Smarty调用display时会读取模板文件,进行数据替换,进行编译文件,以后每次访问都会直接访问编译文件,从而减少了读取模板文件和字符替换时间,编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译(编译是把静态内容保存起来,动态内容根据传入的参数不同而不同)
如果启用了缓存,则会根据编译文件生成缓存文件,在访问的时候如果有缓存文件并且缓存文件没有过期,则直接访问缓存文件。
能够使HTML和PHP分离开使用的模板
Smarty phplib ….
PHP如何实现页面跳转
//PHP 函数 header("location:http://www.baidu.com"); header("refresh:5,url=http://www.baidu.com"); //利用meta <meta http-equiv="refresh" content="3,url=http://www.baidu.com" >
写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):
$script = "以下内容不显示:<script type='text/javascript' m='name'>alert('cc');</script>";
//两种都可以匹配
$pattern = '/<script[^>]*?>.*?<\/script>/si';
$pattern = '/<script[^>]*>.*<\/script>/si';
怎么从一个字符串中去除HTML标签
// 去除HTML 标签 $string = "<div>divdivdidv</div>"; $pattern = "/^<[a-z]*>(.*)?<\/[a-z]*>/i"; preg_match($pattern, $string, $matches); var_dump($matches); $string = "在前面添加<div>divdivdidv</div>在后面添加内容"; $pattern = "/(.*)<[a-z]+>(.*)<\/[a-z]+>(.*)/i"; preg_match($pattern, $string, $matches); var_dump($matches); $string = "在前面添加<>divdi<div>在里面添加标签</div>vdidv</div>在后面添加内容"; $pattern = "/(.*)(<[a-z]+>((.*)<[a-z]+>(.*)<\/[a-z]+>(.*))*?<\/[a-z]+>)(.*)/i"; $string = "在前面添加<>divdi<div id='div' name='name'>在里面添加标签</div>vdidv</div>在后面添加内容"; $pattern = '/<(^>.*|\/.*)+>/';
///[ ] :表示范围,匹配其中任何一个 //$pattern = '/<("[^"]*\'[^\']*\'[^>"\'])*>/'; echo preg_replace($pattern, '',$string);
请写出并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数
php -r phpinfo(); //运行PHP代码,无需限定符 php -f test.php //-f 指定运行文件

