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 指定运行文件

image                       image

0 条评论
发表一条评论