首頁 php教程 php手册 PHP版的jQuery

PHP版的jQuery

Jun 06, 2016 pm 08:12 PM
jquery php web 個人 前端

个人认为,对于Web前端程序员和跟HTML和CSS打交道的人来说,jQuery是有史以来最伟大的发明。jQuery的出现使Web程序员的开发效率突飞猛进,不亚于工业革命给人类生产力带来的提升。 但问题在在于,只有前端程序员可以利用jQuery的强力,他们可以用它分析HTML

个人认为,对于Web前端程序员和跟HTML和CSS打交道的人来说,jQuery是有史以来最伟大的发明。jQuery的出现使Web程序员的开发效率突飞猛进,不亚于工业革命给人类生产力带来的提升。

但问题在在于,只有前端程序员可以利用jQuery的强力,他们可以用它分析HTML,根据CCS类,HTML属性,CSS规则等各种选择器来查询、获取、操作HTML里的任何一个元素。而作为后端(服务端)程序员来说,他们同样需要分析HTML内容,从HTML中提取符合要求的HTML片段、获取某个符合条件的属性值等。

遇到这种情况,后端程序员通常的做法就是用正则表达式、或用XML解析器。这些做法非常的笨拙,不方便,效率低下。所以,对于在服务器端解析HTML,每个后端程序员都极力避免。

我是一个PHP程序员,最近就遇到了这样的一个任务,需要在服务器端解析HTML,将里面的标题名称和链接提取出来。最初我想开发一个小程序逐行分析HTML,捕捉关键字,或用正则表达式。但简单分析了一下,这样做实在不可取。因为我也是个Web程序员,经常使用jQuery解析HTML页面上的内容。如果这个任务放到浏览器端执行,太简单了,只需要一句代码:jQuery('.title').each(...);,如何能在服务器端也能像jQuery那样进行HTML DOM查询呢?

实际上,在服务器端有不少具有jQuery功能的PHP程序库。在网上稍微做了点功夫,就搜到了10几个声称都能解析HTML的PHP工具。但经过试验,大部分都多少有这样或那样的缺陷,而且都有一个通病,就是中文乱码问题。最终,我选用了一个叫做phpQuery的工具包。

实际上,使用phpQuery这个PHP程序库也是很不情愿的,因为这个程序已经很多年没人维护更新了。但比起其它几个类似功能程序库,例如Zend_Dom、QueryPath、SimpleHtmlDom,它算是好的。

phpQuery的接口很丰富,但很简单。一个基本的用法是这样的:

$list = phpQuery::newDocumentFileHTML('http://www.webhek.com')->find('h2.title a');
foreach($list as $e) { 
	$title = $e->nodeValue;
	$url = $e->getAttribute('href');
}
登入後複製

上面的find()方法返回的对象是PHP官方扩展库中的DOM对象,也就是说,phpQuery是一个基于PHP原生的DOM对象的HTML/XML解析器,这样做的好处是,效率很高。相反,像SimpleHtmlDom这样也是分析HTML/XML的程序库,但没有基于PHP原生DOM对象,当分析大数据量时,很容易产生性能问题,所以不推荐使用。

之前说了,所有的这样类似jQuery的能分析HTML DOM的PHP程序库都一个相同的通病:遇到中文会有乱码。我在使用phpQuery的过程中也遇到了这个问题。

首先PHP中的中文本身就是个问题,而PHP的DOM对象处理中文的方式也是有争议的。官方文档是说,这个DOM扩展包使用的是UTF-8编码,当遇到 ISO-8859-1 编码的文本时,使用 utf8_encode() 和 utf8_decode() 编码和解码,遇到其它编码时,使用Iconv函数进行转码。但现实情况比这要复杂的多。网上有很多意见认为在遇到DOM乱码时,在HTML代码里的<title></title>标记前加入<meta charset="utf-8">就行了。但这种方法有时候也不灵。

我在解决phpQuery的中文乱码问题也是反复尝试才最后搞定的,没有任何理论依据。就像是有个程序员的笑话:这段代码不好用,我不知道为什么。这段代码好用,我也不知道为什么。:(

首先我是在台式机上开发测试的,是Window7,这种环境下会出现两种情况,一种情况是HTML的字符集是GBK/gb2312,一种情况是字符集是UTF-8。奇怪的是,两个同样是gb2312字符集的不同页面,用phpQuery解析后,一个会有乱码,一个没有乱码。同样,两个同样是UTF-8字符集的不同页面,也会出现这种情况。所有,对我来说,没有规律可言。我只能说,这两种方法能解决phpQuery使用过程中出现的乱码,但何时使用哪种?我不知道,你只能两个都试一下,会有一个好用。

所以,有乱码出现时,首先使用第一种方案:

//仍然使用上面的代码例子:
$list = phpQuery::newDocumentFileHTML('http://www.webhek.com')->find('h2.title a');
foreach($list as $e) { 
	$title = $e->nodeValue;
	//进行GBK转码
	$title = iconv("UTF-8","GBK",  $title);
}
登入後複製

如果不行,使用第二种方案:

//仍然使用上面的代码例子:
//指定GBK字符集参数
$list = phpQuery::newDocumentFileHTML('http://www.webhek.com','GBK')->find('h2.title a');
foreach($list as $e) { 
	$title = $e->nodeValue;
}
登入後複製

第一种方案中要使用iconv函数进行转码,第二种方案中不需要iconv转码,但需要在newDocumentFileHTML方法上提供“GBK字符集”。

还有一点很重要,在使用iconv函数转码是,一定要使用GBK,而不是使用gb2312,如果使用gb2312,iconv函数会很容易发生非法字符的报错,使得转码失败。

我以为有了这两种方案护航后,乱码问题再不会出现。可是,你要知道,做程序员很容易的心脏病的。当我把这些代码部署到linux服务器上时,乱码依旧。抓狂。

没办法,程序员的生活就是这样。经过调试,发现,在linux服务器上,采用第二种方案的部分网页仍然正常,但使用第一种方案时,需要去掉iconv函数转码。

下辈子一定不要做程序员。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

CakePHP 使用資料庫 CakePHP 使用資料庫 Sep 10, 2024 pm 05:25 PM

在 CakePHP 中使用資料庫非常容易。本章我們將了解CRUD(建立、讀取、更新、刪除)操作。

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

為了在 cakephp4 中處理日期和時間,我們將使用可用的 FrozenTime 類別。

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

為了進行文件上傳,我們將使用表單助理。這是文件上傳的範例。

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP 是 PHP 的開源框架。它旨在使應用程式的開發、部署和維護變得更加容易。 CakePHP 基於類似 MVC 的架構,功能強大且易於掌握。模型、視圖和控制器 gu

CakePHP 建立驗證器 CakePHP 建立驗證器 Sep 10, 2024 pm 05:26 PM

可以透過在控制器中新增以下兩行來建立驗證器。

CakePHP 日誌記錄 CakePHP 日誌記錄 Sep 10, 2024 pm 05:26 PM

登入 CakePHP 是一項非常簡單的任務。您只需使用一項功能即可。您可以記錄任何後台程序(如 cronjob)的錯誤、異常、使用者活動、使用者採取的操作。在 CakePHP 中記錄資料很容易。提供了 log() 函數

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

See all articles