根据提供的标题、描述、标签及部分内容,我们可以总结出以下关键知识点: ### PHP 编写的编辑器代码 #### 核心知识点解析 ##### 1. 文件读取与处理 在 PHP 中,`file_get_contents()` 函数用于读取整个文件到一个字符串中。此函数非常适合用来读取较小的文件或者进行简单的文本处理任务。 ```php $url = "地址"; $r = file_get_contents($url); ``` - **$url**: 这里存储了要读取文件的 URL 地址。 - **$r**: 存储了读取后的文件内容。 ##### 2. 正则表达式匹配 正则表达式是 PHP 中进行文本模式匹配的强大工具。在本例中,使用 `preg_match()` 和 `preg_match_all()` 函数来提取特定的信息。 ```php preg_match("/<meta name=\"description\" content=\"(.*?)\">/is", $r, $booktitle); ``` - **正则表达式**: `/<meta name="description" content="(.*?)">/is` - `<meta name="description" content=`: 匹配 HTML 中的 `<meta>` 标签。 - `(.*?)`: 使用非贪婪匹配捕获 `content` 属性中的值。 - `is`: 表示不区分大小写,并且使点号能匹配换行符。 - **$booktitle**: 匹配结果将存储在这个数组中。 ```php $preg = '/<li><a href=(.*).shtml target="_blank" class="a03">/isU'; preg_match_all($preg, $r, $zj); ``` - **$preg**: 定义了一个正则表达式,用于匹配包含章节链接的 HTML 结构。 - **preg_match_all()**: 与 `preg_match()` 类似,但会匹配所有出现的位置。 - **$zj**: 匹配结果将存储在这个数组中。 ##### 3. 控制流程与条件判断 使用 `if` 语句来根据 `$ver` 的值选择不同的内容起始和结束标记。 ```php if ($ver == "new") { $content_start = "<!--content start-->"; $content_end = "<!--content end-->"; } elseif ($ver == "old") { $content_start = "</table><!--NEWSZW_HZH_END-->"; $content_end = "<br>"; } ``` - **$ver**: 决定了使用哪种类型的标记来分割内容。 - **$content_start** 和 **$content_end**: 分别表示内容的起始和结束标记。 ##### 4. 文件写入操作 使用自定义的 `writer()` 函数来写入文件。 ```php function writer($content, $url, $mode) { $fp = fopen($url, $mode); fwrite($fp, $content); fclose($fp); } ``` - **$content**: 要写入的内容。 - **$url**: 文件路径。 - **$mode**: 写入模式,例如 `"w+"` 表示覆盖写入,`"a+"` 表示追加写入。 ##### 5. 循环处理 通过 `for` 循环来处理每个章节的内容。 ```php for ($i = 0; $i < $bookzj; $i++) { // 处理每一章的内容 } ``` - **$bookzj**: 章节数量。 - 在循环体内对每一章的内容进行读取、处理并写入文件。 ##### 总结 这段 PHP 代码主要用于从指定 URL 地址抓取 HTML 内容,并利用正则表达式解析其中的信息(如章节链接、描述等),然后将处理后的内容写入到本地文件中。通过这种方式,可以方便地从网站上批量下载文章或书籍内容。注意,在实际应用时,应确保遵循网站的爬虫政策,避免非法抓取数据。
<?php
$url = "地址";
$ver = "old";
$r = file_get_contents($url);
preg_match("/<meta name=\"description\" content=\"(.*?)\">/is",$r,$booktitle);
$bookname = $booktitle[1];
$preg = '/<li><a href=(.*).shtml target=_blank class=a03>/isU';
preg_match_all($preg, $r, $zj);
$bookzj = count($zj[1]);
if ($ver=="new"){
$content_start = "<!--正文内容开始-->";
$content_end = "<!--正文内容结束-->";
}
if ($ver=="old"){
$content_start = "<\/table><!--NEWSZW_HZH_END-->";
$content_end = "<br>";
}
header("Content-Type:text/html;charset=gb2312");
writer($bookname." ".$bookzj."\r\n".date("D M j G:i:s T Y")."\r\n", "./ailaopo/".$bookname.".txt","w+");
for ($i=0;$i<$bookzj;$i++) {
//echo
$str = file_get_contents preg_match("/(<title>)(.*?)(<\/title>)/is",$str,$title);
$title = str_replace("","",$title[2]);
preg_match("/(".$content_start.")(.*?)(".$content_end.")/is",$str,$content);
$content = preg_replace("/<(.*?)>/s","",str_replace("</p>","\r\n",$content[2]));
print_r($content);
exit;
$result = " \r\n".($i+1)."".$title."\r\n".$content;
writer($result, "./ailaopo/".$bookname.".txt","a+");
- wideliafy2013-08-07还行,还得自己改改再用
- u0100113932013-05-09还行 !不过就是太少了公呢个!
- ptxyslb2014-04-03看了下代码,感觉太过于简单了
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助