9个实用的PHP代码片段:从网页抓取到数据处理

Ivy
Ivy
发布时间:2026-10-13| 6人浏览过
原创

本文整理了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开发与数据处理技巧的资料请关注本站其它相关文章!
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。