获取特定行号下方的文本内容

时间:2011-08-23 21:04:26

标签: php

我在这里使用PHP。

我想提取特定行号下面的文字。我想要这样做的原因是从CURL响应中删除HTTP标头信息。

以下是样本回复数据中的一些代码:

HTTP/1.1 203 OK
Date: Tue, 23 Aug 2011 20:56:41 GMT
Server: Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4   Perl/v5.10.1
X-Powered-By: PHP/5.3.5
Set-Cookie: PHPSESSID=ke0uv5bm0mqjn3i3jad6n20co4; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Test-Header: This is my test header
Content-Length: 24
Content-Type: text/html

This is the get response

我想要做的是删除所有标题信息并仅返回我的内容,即“这是我的回复”。

我已经使用正则表达式成功完成了这项工作,但我想做一些简单的事情,清除主响应上方的内容,而不是匹配标题内容,然后用空格替换。

有什么想法吗?

感谢。

4 个答案:

答案 0 :(得分:4)

你不想要标题?告诉cURL不要给你标题:

$ch1 = curl_init();

// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com");
curl_setopt($ch1, CURLOPT_HEADER, 0);

答案 1 :(得分:0)

我会使用file()。例如,您可以这样做:

$URL = 'www.whatever.com';

$URL = file($URL);

$count = count($URL);

$line_number = 15; // for example

for($I=$line_number; $I<=$count; $I++){
  echo $URL[$I];
}

希望有效。

答案 2 :(得分:0)

如果您仍然需要标题,可以单独从cURL

获取标题
$url = 'http://www.example.com';
print_r(get_headers($url)); //returns headers array

并使用

执行您的cURL
$ch1 = curl_init();

// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, $url);
curl_setopt($ch1, CURLOPT_HEADER, 0);

如上所述

(可能不是很快但可能不适合重新指示)

答案 3 :(得分:0)

我做了一点探讨,这就是我想出的解决方案。

为了获得我的标题内容占用的行号数,我编写了以下代码:

$pattern_1_str = '/(http\/\d\.\d)\s+([\d]+)\s+([\w\-\/\'\"\(\)\\\. ]+)/i';
$pattern_2_str = '/([\w\-]+)\:\s+(.+)/i';

$matches_1_arr = array();
$matches_2_arr = array();

preg_match_all($pattern_1_str, $curl_response_res, $matches_1_arr);
preg_match_all($pattern_2_str, $curl_response_res, $matches_2_arr);

$line_count_1_str = count($matches_1_arr[0]);
$line_count_2_str = count($matches_2_arr[0]);

$line_num_offset_str = bcadd(1, bcadd($line_count_1_str, $line_count_2_str, 0), 0);

然后只获取内容,以下代码将执行此操作:

$val_str_arr = array();
$val_str_arr = explode("\n", trim($curl_response_res));

$line_num_int = intval($line_num_offset_str);

$val_str_slice_arr = array();
$val_str_slice_arr = array_slice($val_str_arr, $line_num_int);

$curl_response_content_only_str = implode("\n", $val_str_slice_arr);

$curl_response_res是上述问题中提到的响应数据。

我不确定这段代码的效率如何,但对于来自CURL的简单且相对较短的响应数据,它看起来确实没问题。

感谢您的回复。