本站已关停,现有内容仅作科研等非赢利用途使用。特此声明。
查看: 2792|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2013-5-30 15:35:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 chenglu 于 2013-5-30 15:58 编辑

第一部分、基础知识点
1、一个php截取指定字符串之间的字符串的类
知识来源http://hi.baidu.com/ijob/blog/item/eb83213f7f2494e654e723dc.html
  1. <?php
  2. class get_c_str {
  3. var $str;
  4. var $start_str;
  5. var $end_str;
  6. var $start_pos;
  7. var $end_pos;
  8. var $c_str_l;
  9. var $contents;
  10. function get_str($str,$start_str,$end_str){
  11.    $this->str = $str;
  12.    $this->start_str = $start_str;
  13.    $this->end_str = $end_str;
  14.    $this->start_pos = strpos($this->str,$this->start_str)+strlen($this->start_str);
  15.      $this->end_pos = strpos($this->str,$this->end_str);
  16.    $this->c_str_l = $this->end_pos - $this->start_pos;
  17.    $this->contents = substr($this->str,$this->start_pos,$this->c_str_l);
  18.    return $this->contents;
  19. }
  20. }
  21. ?>
复制代码
赞叹高人,这么厉害的功能用短短几行代码就搞定。同时再次感谢奉献精神。
上述类的使用方法:
  1. <?php
  2. $get_c_str = new get_c_str;
  3. echo $get_c_str -> get_str('[123456789]','[',']');
  4. ?>
复制代码
2、过滤非必要的html代码:strip_tags()函数
用法:
  1. strip_tags($sjb,'<img><p>');
复制代码
“()”的逗号前是要处理的字符串(可以是赋有字符串值的变量),逗号后是过滤时保留的html标签。如果不指定它,所有被处理字符串中的html标签将被全部清掉,只留下文字。

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

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

  25. $file_handle = fopen("$file_name", "r");
  26. while (!feof($file_handle)) {
  27.    $line = fgets($file_handle);
  28.    $sjb=$sjb.$line;
  29. }
  30. fclose($file_handle);
  31. //截取
  32. $get_c_str = new get_c_str;
  33. $sjb=$get_c_str -> get_str($sjb,'forecast">','margin-bottom');
  34. //去除非必要html
  35. $sjb=strip_tags($sjb,'<img><p>');
  36. //替换
  37. $sjb=str_replace('src="/','src="http://yn.weather.com.cn/',$sjb);
  38. //转码
  39. $sjb= mb_convert_encoding($sjb, "GBK", "UTF-8");
  40. echo $sjb;
  41. ?>
复制代码
原文:http://blog.csdn.net/woaixhq/article/details/6122025
ChinaGDG.com
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表