0

0

MediaWiki API中创建列表项与换行:URL编码的换行符应用指南

DDD

DDD

发布时间:2025-07-29 21:22:01

|

1065人浏览过

|

来源于php中文网

原创

MediaWiki API中创建列表项与换行:URL编码的换行符应用指南

本教程详细阐述了如何在使用MediaWiki API编辑维基页面时,正确插入换行符以生成列表项。针对常见的\n、\r\n或
无效问题,文章揭示了解决方案:通过URL编码的%0D%0A来模拟回车换行。内容涵盖API请求参数配置、PHP示例代码,并强调了内容编码的重要性,确保API提交的数据能被MediaWiki正确解析,从而实现清晰的列表排版。

问题解析:MediaWiki API中列表项换行失效的原因

在使用mediawiki api通过编程方式编辑维基页面时,开发者常会遇到一个普遍的问题:尝试使用标准换行符(如\n、\r\n)或html换行标签(
)来创建列表项时,所有内容却显示在同一行,无法正确生成分行显示的列表。例如,期望得到:

* 项目一
* 项目二

但实际输出却是:

* 项目一* 项目二

这通常是由于API在接收和解析POST请求中的内容时,对这些传统换行符的处理方式与预期不符。当使用http_build_query等函数构建请求体时,\n或\r\n可能会被URL编码为%0A或%0D%0A。虽然%0D%0A理论上代表回车换行,但MediaWiki的解析器在处理通过API提交的wiki文本时,对这种编码后的换行符可能需要特定的格式才能正确识别为列表项分隔符。

解决方案:利用URL编码的CRLF

解决此问题的关键在于,使用MediaWiki API能够正确识别的URL编码回车换行符序列:%0D%0A。这个序列代表了回车符(CR,\r)和换行符(LF,\n)的组合,即\r\n的URL编码形式。当它被作为wiki文本的一部分提交给API时,MediaWiki的解析器能够将其正确地解释为一次硬换行,从而使得后续的列表标记(如*)能够被识别为新的列表项。

实践示例:PHP中构建MediaWiki API列表内容

以下是一个PHP示例,展示了如何构造包含列表项的wiki文本,并使用cURL通过MediaWiki API进行提交。

  1. 构建列表内容

    一帧秒创
    一帧秒创

    基于秒创AIGC引擎的AI内容生成平台,图文转视频,无需剪辑,一键成片,零门槛创作视频。

    下载

    在构建列表内容时,每个列表项后都应附加%0D%0A。同时,为了生成标准的维基列表,每个项目前应加上星号*。如果需要创建内部链接,可以使用双层方括号[[...]]。

    <?php
    
    // 假设您已经获取了CSRF Token和API EndPoint
    $csrf_Token = "YOUR_CSRF_TOKEN"; // 替换为实际获取的CSRF Token
    $endPoint = "YOUR_MEDIAWIKI_API_URL"; // 替换为您的MediaWiki API地址,例如:http://yourwiki.com/api.php
    
    $title = "API测试页面 - 列表"; // 要编辑的页面标题
    
    $maps = [];
    $mapNames = ["地图A", "地图B", "地图C"];
    
    foreach ($mapNames as $mapName) {
        // 使用 * 作为列表标记,[[...]] 创建内部链接,并以 %0D%0A 结尾以确保换行
        $maps[] = "* [[" . $mapName . "]]%0D%0A";
    }
    
    // 将所有列表项连接成一个字符串
    $content = implode("", $maps);
    
    // 完整的wiki文本内容,可以包含其他文本
    $fullContent = "这是一个通过API创建的列表:\n\n" . $content . "\n\n更多信息。";
    
    // 准备API请求参数
    $params4 = [
        "action" => "edit",
        "title" => $title,
        "text" => $fullContent, // 提交包含列表的完整内容
        "token" => $csrf_Token,
        "format" => "json"
    ];
    
    // 初始化cURL会话
    $ch = curl_init();
    
    // 设置cURL选项
    curl_setopt( $ch, CURLOPT_URL, $endPoint );
    curl_setopt( $ch, CURLOPT_POST, true ); // 设置为POST请求
    curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $params4 ) ); // 构建POST数据
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); // 返回响应内容而不是直接输出
    curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); // 保存会话cookie
    curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" ); // 读取会话cookie
    
    // 执行cURL请求
    $output = curl_exec( $ch );
    
    // 检查是否有错误
    if (curl_errno($ch)) {
        echo 'cURL Error: ' . curl_error($ch);
    } else {
        // 输出API响应
        echo "API Response:\n";
        echo json_encode(json_decode($output), JSON_PRETTY_PRINT); // 格式化输出JSON
    }
    
    // 关闭cURL会话
    curl_close( $ch );
    
    ?>
  2. 获取CSRF Token

    在执行编辑操作前,通常需要获取一个CSRF(跨站请求伪造)令牌。这可以通过MediaWiki API的action=query&meta=tokens&type=csrf来获取。

    // 示例:获取CSRF Token的代码片段
    // 假设您已经登录并保存了session cookie
    $tokenParams = [
        "action" => "query",
        "meta" => "tokens",
        "type" => "csrf",
        "format" => "json"
    ];
    
    $ch_token = curl_init();
    curl_setopt($ch_token, CURLOPT_URL, $endPoint . "?" . http_build_query($tokenParams));
    curl_setopt($ch_token, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch_token, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt($ch_token, CURLOPT_COOKIEFILE, "cookie.txt");
    $tokenOutput = curl_exec($ch_token);
    curl_close($ch_token);
    
    $tokenData = json_decode($tokenOutput, true);
    $csrf_Token = $tokenData['query']['tokens']['csrftoken'];
    // ... 然后将 $csrf_Token 用于上面的编辑请求

注意事项

  • URL编码的重要性: 确保%0D%0A作为字面量字符串被包含在$content中,而不是在http_build_query之后才被编码。http_build_query会自动对参数值进行URL编码,但在这里,我们希望%0D%0A本身就是我们想要传递给MediaWiki解析器的“字符序列”,而不是让\r\n被http_build_query再次编码。幸运的是,%本身会被http_build_query编码为%25,但%0D%0A作为整体是MediaWiki期望的特殊序列,因此直接使用它通常是有效的。
  • MediaWiki Markup: 除了*用于无序列表,您还可以使用#创建有序列表。例如,# [[项目]]%0D%0A。
  • API权限: 确保用于API请求的用户账户具有编辑页面的权限。
  • 错误处理: 在实际应用中,务必对cURL的执行结果和API的响应进行详细的错误检查,例如检查curl_exec的返回值、HTTP状态码以及API响应中的error字段。
  • 会话管理: 保持cURL会话的cookie文件(cookie.txt)的正确读取和写入,这对于维持登录状态和获取CSRF令牌至关重要。

总结

通过在MediaWiki API编辑请求中,利用URL编码的%0D%0A作为列表项之间的换行符,可以有效地解决列表内容显示在同一行的问题。这种方法确保了MediaWiki解析器能够正确识别并渲染出结构清晰、分行显示的列表。掌握这一技巧对于自动化维基内容管理和程序化生成页面具有重要意义。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6500

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

368

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

445

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

97

2025.08.19

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

454

2023.06.14

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

183

2023.10.30

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

492

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

377

2023.10.25

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap4.x---十天精品课堂
Bootstrap4.x---十天精品课堂

共22课时 | 1.8万人学习

ThinkPHP6.x API接口--十天技能课堂
ThinkPHP6.x API接口--十天技能课堂

共14课时 | 1.2万人学习

极致CMS零基础建站教学视频
极致CMS零基础建站教学视频

共62课时 | 6.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号