You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从TXT文件提取字符串并通过CURL发送时的JSON格式问题

问题分析

核心问题是提取的文本包含隐藏换行符,导致手动拼接的JSON格式非法;同时生成TXT文件的逻辑存在换行符处理不当的问题,可能引发读取时内容跨行的异常。

解决方案

1. 清理提取内容中的空白字符

无论生成文件时的换行符如何处理,提取$text后都应主动清理多余的换行、空格等空白字符,避免破坏JSON结构:

// 修改原提取逻辑
if ($pos !== false) {
    $ampPos = strpos($line, "&");
    if ($ampPos !== false) {
        $text = substr($line, $ampPos + 1);
        // 移除首尾所有空白字符(含换行、空格、制表符)
        $text = trim($text);
        echo $text;
        break;
    }
}

trim()能彻底清除字符串首尾的干扰空白,确保$text为纯净的目标内容。

2. 用json_encode()生成合法JSON

手动拼接JSON极易因特殊字符(如引号、换行)导致格式错误,推荐使用PHP内置的json_encode()自动生成:

// 替换原CURL POSTFIELDS配置
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode(['string' => $text]),
// 必须设置JSON请求头
CURLOPT_HTTPHEADER => [
    'Content-Type: application/json',
],

该方法会自动转义特殊字符,从根源上避免JSON格式非法问题。

3. 修复TXT文件生成逻辑

当前生成代码存在两个问题:数组拼接内容无换行,导致多次追加的内容挤在同一行;开头加PHP_EOL会产生空行干扰读取。修改后:

$filename = 'output.txt';
$date = date("d/m-H:i : ");
$eventid = substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyz'), 1, 16);
// 拼接成完整行,结尾加换行符确保每条记录独立
$lineContent = $date . 'eventid=' . $eventid . '&' . $string . PHP_EOL;
// 直接传入字符串,避免数组拼接的不确定性
file_put_contents($filename, $lineContent, FILE_APPEND);

修改后每次追加的内容都是独立一行,fgets()读取时能精准获取单条记录。

4. 优化读取逻辑的鲁棒性

原代码未判断&是否在目标eventid之后,可能提取到无效内容,增加校验:

while (($line = fgets($handle)) !== false) {
    $pos = strpos($line, $eventid);
    if ($pos !== false) {
        $ampPos = strpos($line, "&");
        // 确保&在eventid之后,避免提取无效内容
        if ($ampPos !== false && $ampPos > $pos) {
            $text = substr($line, $ampPos + 1);
            $text = trim($text);
            echo $text;
            break;
        }
    }
    $count++; 
}

内容的提问来源于stack exchange,提问作者Glen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 15:15:42