原创_php截取指定字符之间内容的类与实例(含转码、过滤html等)

像我这样的半拉子程序员,基本靠百度一下。基本是在前辈们的宝贵经验基础上,根据现在的需要进行整合、修改。因此首先鸣谢。声明:知识来源并不代表原创来源,只代表本人从该处找到该知识。
第一部分、基础知识点
1、一个php截取指定字符串之间的字符串的类
知识来源http://hi.baidu.com/ijob/blog/item/eb83213f7f2494e654e723dc.html
<?php
class get_c_str {
var $str;
var $start_str;
var $end_str;
var $start_pos;
var $end_pos;
var $c_str_l;
var $contents;
function get_str($str,$start_str,$end_str){
   $this->str = $str;
   $this->start_str = $start_str;
   $this->end_str = $end_str;
   $this->start_pos = strpos($this->str,$this->start_str)+strlen($this->start_str);
     $this->end_pos = strpos($this->str,$this->end_str);
   $this->c_str_l = $this->end_pos - $this->start_pos;
   $this->contents = substr($this->str,$this->start_pos,$this->c_str_l);
   return $this->contents;
}
}
?>
赞叹高人,这么厉害的功能用短短几行代码就搞定。同时再次感谢奉献精神。
上述类的使用方法:
<?php
$get_c_str = new get_c_str;
echo $get_c_str -> get_str('[123456789]','[',']');
?>

2、过滤非必要的html代码:strip_tags()函数
用法:strip_tags($sjb,'<img><p>');
“()”的逗号前是要处理的字符串(可以是赋有字符串值的变量),逗号后是过滤时保留的html标签。如果不指定它,所有被处理字符串中的html标签将被全部清掉,只留下文字。

3、抓取到的内容(例如网页)编码与需要显示时不符时的处理。
如果抓到的内容和显示的页面编码不一致,会导致乱码,辛苦半天会很郁闷。找到处理方法如下:
知识来源:http://hi.baidu.com/swhl010515/blog/item/033ae6e54a52ca22b838200d.html
a、把 GBK 编码字串转换成 UTF-8 编码字串
Php代码
<?php   
header("content-Type: text/html; charset=Utf-8");   
echo mb_convert_encoding("你是我的好朋友", "UTF-8", "GBK");   
?>   
<?php
header("content-Type: text/html; charset=Utf-8");
echo mb_convert_encoding("你是我的好朋友", "UTF-8", "GBK");
?>
b、把 UTF-8 编码字串转换成 GB2312 编码字串
Php代码
// 注意将此文件存盘成   utf-8 编码格式文件再测试   
<?php   
header("content-Type: text/html; charset=gb2312");   
echo mb_convert_encoding("你是我的好朋友", "gb312", "utf-8");   
?>   
// 注意将此文件存盘成  utf-8 编码格式文件再测试
<?php
header("content-Type: text/html; charset=gb2312");
echo mb_convert_encoding("你是我的好朋友", "gb312", "utf-8");
?>
c、对整个页面 进行转换
该方法适用所有编码环境。把前128个字符以外(显示字符)的字符集都用 NCR (Numeric character reference,如“汉字”将转换成“汉字”这种形式)来表示,这样的编码在任意编码环境下页面都能正常显示。
方法是在php文件的头部加上下面三行代码:
Php代码
mb_internal_encoding("gb2312");  // 这里的gb2312是你网站原来的编码   
mb_http_output("HTML-ENTITIES");   
ob_start('mb_output_handler');   
mb_internal_encoding("gb2312");  // 这里的gb2312是你网站原来的编码
mb_http_output("HTML-ENTITIES");
ob_start('mb_output_handler');
*注意:使用mb_convert_encoding 函数需启用PHP 的mbstring (multi-byte string)扩展

二、应用实例
本实例的目的是把某网页的某个部分抓取下来,处理成可以调用的变量,或更加符合使用要求的格式。
<?
//基本变量*获取数据源,可为网页,也可以是本地文本文件及网页
$file_name="http://yn.weather.com.cn/lijiang/index.shtml";
//截取函数
class get_c_str {
var $str;
var $start_str;
var $end_str;
var $start_pos;
var $end_pos;
var $c_str_l;
var $contents;
function get_str($str,$start_str,$end_str){
   $this->str = $str;
   $this->start_str = $start_str;
   $this->end_str = $end_str;
   $this->start_pos = strpos($this->str,$this->start_str)+strlen($this->start_str);
     $this->end_pos = strpos($this->str,$this->end_str);
   $this->c_str_l = $this->end_pos - $this->start_pos;
   $this->contents = substr($this->str,$this->start_pos,$this->c_str_l);
   return $this->contents;
}
}
///读取

$file_handle = fopen("$file_name", "r");
while (!feof($file_handle)) {
   $line = fgets($file_handle);
   $sjb=$sjb.$line;
}
fclose($file_handle);
//截取
$get_c_str = new get_c_str;
$sjb=$get_c_str -> get_str($sjb,'forecast">','margin-bottom');
//去除非必要html
$sjb=strip_tags($sjb,'<img><p>');
//替换
$sjb=str_replace('src="/','src="http://yn.weather.com.cn/',$sjb);
//转码
$sjb= mb_convert_encoding($sjb, "GBK", "UTF-8");
echo $sjb;
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值