Php “如何使用新行”\r\n“;在curl post的数组中输入值

Php “如何使用新行”\r\n“;在curl post的数组中输入值,php,Php,我不确定我问的问题是否正确,但这正是我想做的。我有一个文件,它有几百行,看起来像这样: 42608,123 test rd \r\nAkron\r\nOH\r\n44666 42194,1234 N test rd\r\nChicaco\r\nIL\r\n95806 42863,209 E test st\r\nCleveland\r\nOH\r\n44303 42970,215 W Test\r\nSandusky\r\nOH\r\n45801 我从文件中取出每一行并将其放入数组,然后将数组

我不确定我问的问题是否正确,但这正是我想做的。我有一个文件,它有几百行,看起来像这样:

42608,123 test rd \r\nAkron\r\nOH\r\n44666
42194,1234 N test rd\r\nChicaco\r\nIL\r\n95806
42863,209 E test st\r\nCleveland\r\nOH\r\n44303
42970,215 W Test\r\nSandusky\r\nOH\r\n45801
我从文件中取出每一行并将其放入数组,然后将数组分解为单独的变量,第一个数字是我的$clientid,第二个数字是$address。$address被放入Base64编码的序列化数组中,在我的post请求中看起来是这样的:

'customfields' => array(base64_encode(serialize($serviceaddress))),
我怀疑这是由于从数组中的文件中拉入值造成的,但不确定为什么或如何修复它,如果我手动指定,则换行符工作正常:

'customfields' => array(base64_encode(serialize(215\r\n\W\r\n\test\r\nAkron\r\n\OH\r\n\44303)))),
我也尝试过使用nl2br作为服务地址,但应用程序似乎并不关心它,它只关心\r\n

<?php
$filename = 'import.txt';
$contents = file($filename);

foreach($contents as $line) {
$field = explode(',', $line);
$clientid = "$field[0]";
$serviceaddress = "$field[1]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://my.fqdn.tld/api.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
    http_build_query(
        array(
            'action' => 'UpdateClient',
            'clientid' => "$clientid",
            'customfields' => array(base64_encode(serialize($serviceaddress))),
            'responsetype' => 'json',
        )
    )
);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
$myArray = json_decode($response, true);
echo "$myArray";
echo "$response";
}

尽管正如我所提到的,如果我手动指定$serviceaddress而不是使用变量换行符,实际上是可行的

在这里,您犯了一个初学者常见的错误,即没有正确区分代码和数据

除此之外,这里显然缺少双引号作为字符串分隔符-这是PHP解释器解析的代码。PHP解释器“知道”双引号分隔的文本文本中的
\r\n
具有特殊含义“换行符”,因此它会相应地进行翻译

42608,123 test rd \r\nAkron\r\nOH\r\n44666
你的文本文件内容在这里,那只是数据。您在这里有文字字符
\
r
\
n
,仅此而已。这不会被PHP解释器或其他任何人解析,您只是从文本文件中读取。因此,如果您希望
\r\n
在此处也被“翻译”为实际的换行符,那么您必须自己执行该任务:

$serviceaddress = str_replace('\r\n', "\r\n", $field[1]);

“\r\n”
这里还是文字字符,不是实际的换行符-因为此文字文字由单引号分隔。
“\r\n”
是实际的换行符。)

您在该文件中实际放了什么?由四个字符组成的字符串
\r\n
和两个连续的换行特殊字符
\r
\n
之间有很大的区别文件实际上包含了\r\n,每一行实际上看起来像:42970215 W Test\r\nSandusky\r\nOH\r\n45801Ah非常感谢您帮助我理解,经过你的解释,这显然是有道理的。
$serviceaddress = str_replace('\r\n', "\r\n", $field[1]);