不好意思,我这个笔记是即时的,边学边把自己觉得比较有用的东西拿出来大家分享(晕,在公司实在没事做了,闲的,呵呵)
本来想把整理的资料放在一起的,竟然不让编辑,只要写在下面了.
今天在研究一个很有用的东西,截取HTML字符串.
比如有一个网页只有几行
引用:
index.html
<HTML>
<HEAD><TITLE>myhomepage</TITLE></HEAD>
<BODY>
正文内容
</BODY>
</HTML>
我想把<TITLE>里面的字符串(即标题)截取出来.
分以下几步
1.打开这个文件
2.将文件内所有字符串都读出来
3.用正则表达式截取所需要的内容
第一步和第二步比较简单
引用:
if (file_exists('$page_path')==true)
{
$of=fopen($page_path,r);
$GetHtmlStr=fread($of,filesize($page_path));
}
注意fread()是读取所有行,fgets是读取一行,并将指针停留在下一行开头.
第三步需要建立正则表达式"(<title>)(.*)(</title>)"(关于正则可以去百度一下,不过不同的语言正则规范有差别)
用ereg()函数
引用:
ereg("(<title>)(.*)(</title>)",$string,$cutStr)
注意ereg()第三个参数是可有可无的,$cutStr是一个数组,正则式匹配的话,有几个括号就代表数组里有几项.
看到数组我就想print_r()一下,谁知道数组里字符串没有输出,查看源文件的时候才想起来HTML标记还需要转义一下
PHP里面的HTML转义函数htmlspecialchars(),但是好像是不能转数组的吧?
曾经想过做一个循环,每次取一项就转义一下然后再存回数组内,但是觉得太麻烦了.
后来发现有两个函数很有用explode(),implode()
implode() 数组转为字符串,我用"::"分割("::"这样的字符串一般网页里面不经常出现,你也可以再想更BT点的分割字符串)
explode() 字符串转为数组.
好了,有了这两个函数问题就解决了.
代码如下
引用:
$string='<html><title>myhomepage</title></html>';//代表已经把HTML的内容读出来了
if (ereg("(<title>)(.*)(</title>)",$string,$cutStr))
{
$cutStr=htmlspecialchars(implode("::",$cutStr));
$cutStr=explode("::",$cutStr);
echo "<pre>";
print_r($cutStr);
echo "</pre>";
}else{
echo 'false';
}
网页显示结果
引用:
Array
(
[0] => <title>myhomepage</title>
[1] => <title>
[2] => myhomepage
[3] => </title>
)
说明:
[0]->包含整个匹配的字符串
[1]->第一个括号
[2]->第二个括号
...
ps:个人觉得php里面的函数真的很强大,asp,唉...
[
本帖最后由 hadesmile 于 2007-11-30 16:16 编辑 ]