php 实现从其他网站拷贝的富文本内容并将里面的图片抓取到本地
2014-06-13 15:39
609 查看
</pre><pre code_snippet_id="391050" snippet_file_name="blog_20140613_1_8092354" name="code" class="php">
<p><pre name="code" class="php">public function saveImgFromList($content, $dist, $url) { $list = $this->getImgByReg($content); $accessUrl = $this->getServiceLocator()->get('access_upload_message'); foreach ($list as $key => $val) { if ( strpos($val['src'], $accessUrl) !== false ) { $arr = explode('/', $val['src']); $name = array_pop($arr); $list[$key]['src'] = $name; continue; } $arr = explode('.', $val['src']); $ext = array_pop($arr); if (!$ext || !in_array($ext, self::$imgExt)) { $ext = 'jpg'; } $name = md5(uniqid()) . '.' . $ext; $list[$key]['src'] = $name; $file = file_get_contents($val['src']); file_put_contents($dist . $name, $file); } $newImgInfo = $this->replaceImg($list, $url); $newImgTags = $newImgInfo['newImgTags']; $newImgUrls = $newImgInfo['newImgUrls']; $patterns = array('/<img\s.*?>/'); $callback = function( $matches ) use ( &$newImgTags ) { $matches[0] = array_shift($newImgTags); return $matches[0]; }; $res = array(); $res['content'] = preg_replace_callback($patterns, $callback, $content); $res['image_urls'] = $newImgUrls; return $res; }
<span style="white-space:pre"> </span>function getImgByReg($str)
{$list = array();$c1 = preg_match_all('/<img\s.*?>/', $str, $m1);for($i = 0; $i < $c1; $i++) {$c2 = preg_match_all('/(\w+)\s*=\s*(?:(?:(["\'])(.*?)(?=\2))|([^\/\s]*))/', $m1[0][$i], $m2); for($j = 0; $j < $c2; $j++) {$list[$i][$m2[1][$j]] = !empty($m2[4][$j])
? $m2[4][$j] : $m2[3][$j];}}return $list;}
<span style="white-space:pre"> </span>function replaceImg($list, $url) { $newImgTags = array(); $newImgUrls = array(); foreach ($list as $key => $val) { $imgTag = '<img '; foreach ($val as $attr => $v) { if ($attr === 'src') { $imgTag .= $attr . '="' . $url . $v . '" '; $newImgUrls[] = $url . $v; } else { $imgTag .= $attr . '="' . $v . '" '; } } $imgTag .= ' >'; $newImgTags[$key] = $imgTag; } return array('newImgTags' => $newImgTags, 'newImgUrls' => $newImgUrls); }
// 模拟使用
</pre><pre code_snippet_id="391050" snippet_file_name="blog_20140613_5_3752909" name="code" class="php">//你想要保存图片的目录
$dist = '/User/www/img/' . date('/Y/m/d');
!is_dir($dist) && mkdir($dist, 0777, true);
</pre><pre code_snippet_id="391050" snippet_file_name="blog_20140613_9_3033752" name="code" class="php">define('<span style="font-family: Arial, Helvetica, sans-serif;">URLHOLDER', </span><span style="font-family: Arial, Helvetica, sans-serif;">'{{urlholer}}');</span><span style="font-family: Arial, Helvetica, sans-serif;"> </span>// 你的图片服务器或目录地址 $url = URLHOLDER . '/img/' . date('/Y/m/');
<p class="p1"><span class="s1">// 这是模拟你需要替换的用户提交的富文本内容 里面包含图片地址</span></p><p class="p1"><span class="s1">$content = </span>'<p>Push Pop Pressè‡´åŠ›äºŽåˆ›é€ ä¸€ä¸ªé€¼çœŸçš„ã€å……满物ç†æ•ˆå<img class="mm" src="http://cms.csdnimg.cn/article/201406/04/538edd87c1b25.jpg">º”的体验。POP就是在这个ç†å¿µä¸‹å‚¬ç”Ÿå‡ºæ¥çš„新一代æˆæžœã€‚</p><p>POP使用Objective-C++编写。Objective-C++是对C++的扩展,就åƒObjective-C是Cçš„æ‰©å±•ä¸€æ ·ã€‚è€Œè‡³äºŽä¸ºä»€ä¹ˆä»–ä»¬ç”¨Objective-C++而ä¸æ˜¯çº¯ç²¹çš„Objective-Cï¼ŒåŽŸå› åœ¨äºŽä»–ä»¬æ›´å–œæ¬¢Objective-C++çš„è¯æ³•ç‰¹æ€§æ‰€æ供的便利。</p><p><strong>POP的架构</strong></p><p>POPç›®å‰ç”±å››ä¸ªéƒ¨åˆ†ç»„æˆï¼ˆå¦‚图1所示),å³Animationsã€Engineã€Utilityã€WebCore。</p><p>图1 POP架构图</p><p><img src="http://cms.csdnimg.cn/article/201406/04/538edd54d9240.jpg" />POP动画æžä¸ºæµç•…,其秘密就在于这个引擎ä¸çš„POPAnimator。POP通过CADisplayLink让动画实现了60 FPSçš„æµç•…æ•ˆæžœï¼Œæ‰“é€ äº†ä¸€ä¸ªæ¸¸æˆçº§çš„动画引擎。</p><p>CADisplayLink是类似NSTimer的定时器,ä¸åŒä¹‹å¤„在于,NSTimer用于我们定义任务的执</p>'<span class="s1">;</span></p> $res = saveImgFromList($content, $dist, $url);
$param = array();
</pre><pre code_snippet_id="391050" snippet_file_name="blog_20140613_13_5760940" name="code" class="php">// 你想要的内容 $param['content'] = $res['content'];
// 内容里面图片url组成的数组
$param['image_urls'] = $res['image_urls'];
这时你的内容就可以入库了
相关文章推荐
- 分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
- [分享黑科技]纯js突破localstorage存储上线,远程抓取图片,并转码base64保存本地,最终实现整个网站所有静态资源离线到用户手机效果却不依赖浏览器的缓存机制,单页应用最新黑科技
- php抓取并保存网站图片的实现代码
- PHP抓取远程图片保存到本地的实现方法
- php实现异步将远程链接上内容(图片或内容)写到本地的方法
- PHP从网站抓取图片并保存本地的代码
- php抓取网站图片并保存的实现方法
- ASP.net(C#)从其他网站抓取内容并截取有用信息的实现代码
- java爬虫实战(1):抓取信息门户网站中的图片及其他文件并保存至本地
- 分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
- php实现异步将远程链接上内容(图片或内容)写到本地的方法
- php抓取网站图片并保存的实现方法
- php抓取并保存网站图片的实现代码
- ASP.net(C#)从其他网站抓取内容并截取有用信息的实现代码
- 用.net实现远程获取其他网站页面内容!(核心代码分析)
- (转)用.net实现远程获取其他网站页面内容!(核心代码分析)
- php 抓取网页内容与图片
- 用asp.net实现远程获取其他网站页面指定内容
- 用.net实现远程获取其他网站页面内容!(核心代码分析)
- ASP.net从其他网站抓取内容并截取有用信息