9个实用的PHP代码片段:从网页抓取到数据处理
本文整理了9个常用的PHP代码片段,涵盖从网页提取关键词、获取页面所有链接、创建数据URI、下载远程图片等基础操作。此外,还包括清理Word HTML标签、检测浏览器语言、保存请求日志、处理Excel日期格式以及JSON与数组相互转换的数据处理方法,助力提升PHP开发效率。
一、从网页中提取关键词
通过 get_meta_tags() 函数可以直接获取网页的 meta 标签信息,其中包含作者定义的 keywords。结合数组处理函数,可以快速清洗并提取出干净的关键词列表。
$meta = get_meta_tags('http://www.emoticode.net/');
$keywords = $meta['keywords'];
// 按逗号分割关键词
$keywords = explode(',', $keywords);
// 去除首尾空格
$keywords = array_map('trim', $keywords);
// 移除空值
$keywords = array_filter($keywords);
print_r($keywords);
二、查找页面上的所有链接
利用 PHP 内置的 DOM 扩展和 XPath,可以解析任意 HTML 页面并提取所有超链接地址。这种方法比正则表达式更稳定,能准确定位 <a> 标签及其 href 属性。
$html = file_get_contents('http://www.example.com');
$dom = new DOMDocument();
@$dom->loadHTML($html); // @ 抑制加载 HTML 时的警告
// 使用 XPath 查找所有 a 标签
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");
for ($i = 0; $i < $hrefs->length; $i++) {
$href = $hrefs->item($i);
$url = $href->getAttribute('href');
echo $url . '
';
}
三、创建数据 URI (Data URI)
数据 URI 可以将图像直接嵌入到 HTML 或 CSS 中,减少 HTTP 请求次数。下面的函数将读取指定文件的内容,进行 Base64 编码,并生成对应的数据 URI 字符串。
function data_uri($file, $mime) {
$contents = file_get_contents($file);
$base64 = base64_encode($contents);
echo "data:$mime;base64,$base64";
}
四、下载并保存远程图片
在搭建网站或爬虫应用时,经常需要从远程服务器下载图片并保存到本地服务器。使用 file_get_contents() 读取远程内容,再通过 file_put_contents() 写入本地路径即可实现。
$image = file_get_contents('http://www.php100.com/image.jpg');
// 保存到本地的 /images/ 目录下
file_put_contents('/images/image.jpg', $image);
五、移除 Microsoft Word HTML 标签
从 Word 粘贴文本到网页时,常会带入大量无用的样式标签(如 font, span)和属性。以下函数使用正则表达式清理这些标签和属性,使 HTML 更加纯净。注意:原文中的 ereg_replace 在较新版本的 PHP 中已被废弃,建议在实际使用时替换为 preg_replace。
function cleanHTML($html) {
// 完全移除不需要的标签: font, span, del, ins
$html = preg_replace("/<(/)?(font|span|del|ins)[^>]*>/i", "", $html);
// 移除 unwanted 属性: class, lang, style, size, face
// 循环两次以确保嵌套属性被正确移除
$html = preg_replace("/<([^>]*)(class|lang|style|size|face)=([\"'][^\"]*[\"']|[^"])*([^>]*)>/i", "<\1>", $html);
$html = preg_replace("/<([^>]*)(class|lang|style|size|face)=([\"'][^\"]*[\"']|[^"])*([^>]*)>/i", "<\1>", $html);
return $html;
}
六、检测浏览器语言
在多语言网站中,可以通过读取服务器变量 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 来获取客户端的首选语言。该函数接受一个可用的语言代码数组作为参数,并返回匹配的语言,若无匹配则返回默认语言。
function get_client_language($availableLanguages, $default = 'en') {
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$langs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach ($langs as $value) {
// 截取语言代码前两位 (如 en-US -> en)
$choice = substr($value, 0, 2);
if (in_array($choice, $availableLanguages)) {
return $choice;
}
}
}
return $default;
}
七、保存请求信息到本地日志
调试或记录简单请求时,可以使用 file_put_contents() 追加写入模式 (FILE_APPEND) 将当前时间及特定信息记录到文件中,便于后续分析。
file_put_contents('/tmp/all.log', 'mapping' . date("m-d H:i:s") . "\n", FILE_APPEND);
八、Excel 日期格式转换
从 Excel 导入数据时,日期通常以数字形式存在(自 1900年1月1日以来的天数)。以下函数提供了两种转换方法:一种是基于 GregorianToJD 函数的传统方法,另一种是基于时间戳计算的现代方法,适用于处理 Excel 日期格式。
// 如果去获取某个excel日期(格式为:2016-03-12),那么获取到的是数字,需要经过转换才能恢复
public function excelTime($date, $time = false) {
if (function_exists('GregorianToJD')) {
if (is_numeric($date)) {
$jd = GregorianToJD(1, 1, 1970);
$gregorian = JDToGregorian($jd + intval($date) - 25569);
$date = explode('/', $gregorian);
$date_str = str_pad($date[2], 4, '0', STR_PAD_LEFT)
. "-" . str_pad($date[0], 2, '0', STR_PAD_LEFT)
. "-" . str_pad($date[1], 2, '0', STR_PAD_LEFT)
. ($time ? " 00:00:00" : '');
return $date_str;
}
} else {
// 处理早于 1970-01-01 的日期可能出现的偏移问题
$ofs = (70 * 365 + 17 + 2) * 86400;
$date = date("Y-m-d", ($date * 86400) - $ofs) . ($time ? " 00:00:00" : '');
return $date;
}
}
九、JSON 与数组相互转换
JSON 是前后端交互最常用的数据格式。PHP 提供了 json_decode() 和 json_encode() 函数来轻松实现 JSON 字符串与 PHP 数据结构之间的转换。
1. JSON 转换成数组或对象
使用 json_decode() 解析 JSON 字符串。默认为对象,第二个参数设为 true 可强制转换为关联数组。
$json = '[{"id":"22","name":"33","descn":"44"}]';
// 默认为对象访问方式
$arr_obj = json_decode($json);
echo $arr_obj[0]->id; // 输出 22
// 转换为数组
$arr = json_decode($json, true);
echo $arr[0]['id']; // 输出 22
2. 数组转换成 JSON
使用 json_encode() 将 PHP 数组编码为 JSON 格式的字符串。
$json_arr = array('WebName' => 'MyWebsite', 'WebSite' => 'example.com');
$php_json = json_encode($json_arr);
echo $php_json; // 输出 {"WebName":"MyWebsite","WebSite":"example.com"}
以上就是这9个实用PHP代码片段的详细内容,更多关于PHP开发与数据处理技巧的资料请关注本站其它相关文章!免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









