php 获取页面中的指定内容类

功能:

1.获取内容中的url,email,image。

2.替换内容中的url,email,image。

url:<a href="url">xxx</a>

email:admin@admin.com

image:<img src="image">


Grep.class.php

<?php
/** grep class
*   Date:   2013-06-15
*   Author: fdipzone
*   Ver:    1.0
*
*   Func:
*
*   set:        设置内容
*   get:        返回指定的内容
*   replace:    返回替换后的内容
*   get_pattern 根据type返回pattern
*/

class Grep{ // class start

    private $_pattern = array(
                            'url' => '/<a.*?href="((http(s)?:\/\/).*?)".*?/si',
                            'email' => '/([\w\-\.]+@[\w\-\.]+(\.\w+))/',
                            'image' => '/<img.*?src=\"(http:\/\/.+\.(jpg|jpeg|gif|bmp|png))\">/i'
                        );

    private $_content = ''; // 源内容


    /* 設置搜尋的內容
    *  @param String $content
    */
    public function set($content=''){
        $this->_content = $content;
    }


    /* 获取指定内容
    *  @param String $type
    *  @param int    $unique 0:all 1:unique
    *  @return Array
    */
    public function get($type='', $unique=0){

        $type = strtolower($type);

        if($this->_content=='' || !in_array($type, array_keys($this->_pattern))){
            return array();
        }

        $pattern = $this->get_pattern($type); // 获取pattern

        preg_match_all($pattern, $this->_content, $matches);

        return isset($matches[1])? ( $unique==0? $matches[1] : array_unique($matches[1]) ) : array();

    }


    /* 获取替换后的内容
    *  @param String $type
    *  @param String $callback
    *  @return String
    */
    public function replace($type='', $callback=''){

        $type = strtolower($type);

        if($this->_content=='' || !in_array($type, array_keys($this->_pattern)) || $callback==''){
            return $this->_content;
        }

        $pattern = $this->get_pattern($type);

        return preg_replace_callback($pattern, $callback, $this->_content);

    }


    /* 根据type获取pattern
    *  @param String $type
    *  @return String
    */
    private function get_pattern($type){
        return $this->_pattern[$type];
    }


} // class end

?>
Demo

<?php
header('content-type:text/htm;charset=utf8');

require('Grep.class.php');

$content = file_get_contents('http://www.test.com/');

$obj = new Grep();
$obj->set($content);

$url = $obj->get('url', 0);
$email = $obj->get('email', 1);
$image = $obj->get('image', 1);

print_r($url);
print_r($email);
print_r($image);

$url_new = $obj->replace('url', 'replace_url');
echo $url_new;

function replace_url($matches){
    return isset($matches[1])? '[url]'.$matches[1].'[/url]' : '';
}
?>


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 PHP ,可以使用输出缓冲区来获取动态生成的页面内容。具体步骤如下: 1. 开启输出缓冲区:使用 `ob_start()` 函数开启输出缓冲区,使得所有输出内容都被缓存。 2. 加载动态内容:在开启输出缓冲区后,可以通过 include、require 等函数加载动态内容,动态内容会被缓存到输出缓冲区。 3. 获取页面内容:使用 `ob_get_clean()` 函数获取输出缓冲区内容,并清空缓冲区。 示例代码如下: ```php <?php // 开启输出缓冲区 ob_start(); // 加载动态内容 include 'dynamic_content.php'; // 获取页面内容 $page_content = ob_get_clean(); // 输出页面内容 echo $page_content; ?> ``` 其,`dynamic_content.php` 是动态内容所在的文件路径,可以根据实际情况进行修改。 ### 回答2: 在PHP,要加载所有动态内容获取页面内容,可以使用以下步骤: 1. 首先,需要使用PHP代码加载所有动态内容。这可以通过不同的方式实现,例如从数据库获取数据,调用API接口或者读取文件等等。根据具体需求选择加载数据的方法,并将加载得到的内容存储在变量。 2. 接下来,通过PHP的输出缓冲功能,可以将页面内容捕捉到一个变量。使用 ob_start() 函数开启输出缓冲区,然后在缓冲区之后的代码输出页面内容。 3. 在页面内容输出之后,使用 ob_get_contents() 函数将输出的页面内容获取到一个变量。这样就可以获取页面内容了。 4. 最后,使用 ob_end_clean() 函数清除输出缓冲区,确保页面内容不会被输出到浏览器。然后可以对获取到的页面内容进行进一步处理,例如保存到文件、发送到其他地方或者进行其他操作。 综上所述,通过以上步骤,可以在加载所有动态内容获取页面内容。使用PHP的输出缓冲相关函数,可以灵活地控制输出的内容,并在获取到所需内容后进行后续处理。 ### 回答3: 在PHP,我们可以通过一系列步骤来加载所有动态内容获取页面内容。 首先,我们需要使用PHP的内置函数来加载动态内容。可以使用include或require语句来加载其他文件或脚本,将其内容嵌入当前的PHP文件。这样可以确保在页面被执行或输出之前,动态内容已经被加载。 其次,根据具体的需求,我们可以使用不同的方法获取页面内容。如果我们希望获取整个页面内容,可以使用file_get_contents函数。这个函数可以读取指定URL的内容并以字符串的形式返回。我们只需要将要获取内容的URL作为参数传递给该函数即可。 另外,如果页面内容较大或需要进行一些处理,可以考虑使用cURL库。cURL库是一个用于进行URL传输的开源库,可以实现不同的网络协议,并支持各种操作和功能。通过cURL,我们可以更加灵活地获取和处理页面内容,例如添加请求头、设置超时时间等。 最后,获取页面内容后,我们可以根据需求进行进一步的处理。例如,可以将内容保存到文件、解析HTML元素、提取关键信息等。 需要注意的是,加载和获取页面内容的过程可能会出现一些问题,例如访问权限限制、网络连接失败等。我们需要进行适当的错误处理和异常捕获,以确保代码的稳定性和可靠性。同时,还要注意合理和安全地使用加载和获取页面内容的功能,以避免潜在的安全风险和性能问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值