(抱歉,在此发布标题中,“ _”在str(和)之间不能被接受)
几年来我没有做过任何Regexp的工作,然后陷入僵局,试图弄清楚该怎么做。
然后,我使用str_replace作为可能的选项遇到了一个代码片段,并决定尝试一下。现在我在“ StucksVille”中。
目标是将Java App的传入数据重新格式化为PHP页面,并将数据清理为常规的.csv外观,并将该数据写入服务器上的.csv文件。每个数据记录中有12个字段。
(传入数据) csv = data%2Cdata%2data%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%0D%0A
这就是我要尝试的事情:
Delete/Remove beginning csv=
Replace all %2C with , (a comma)
Replace ending %0D with \r (carriage return)
Replace ending %0A with \n (newline)
这是我想出的,但是test.csv文件数据看起来仍然与(未清理的)原始{SIGH}相同。
$entityBody = file_get_contents('php://input');
$cleaned1 = str_replace("\xcsv=", "\x", $entityBody);
$cleaned2 = str_replace("\x%2C", "\x,", $cleaned1);
$cleaned3 = str_replace("\x%0D", "\x\r", $cleaned2);
$cleaned4 = str_replace("\x%0A", "\x\n", $cleaned3);
$fp = fopen('test.csv', 'a+');
fwrite($fp, $cleaned4);
fclose($fp);
感谢您的协助或指导。
-Stucko
答案 0 :(得分:0)
只需使用urldecode()
即可为您完成几乎所有操作
$in = 'csv=data%2Cdata%2data%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%0D%0A';
$in = str_replace('csv=', '', $in);
$clean = urldecode($in);
echo $clean;
结果
data,data-ata,data,data,data,data,data,data,data,data,data
答案 1 :(得分:0)
您不需要str_replace()
或regex
。您的输入字符串是查询字符串的一部分,它是URL编码的,PHP提供了正确处理它的工具。
您可以使用urldecode()
来获取实际值,然后根据需要对其进行处理:
$input = 'csv=data%2Cdata%2data%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%0D%0A';
echo(urldecode($input));
# The output is:
# csv=data,data-ata,data,data,data,data,data,data,data,data,data
更好的是,您可以改用parse_str()
,它也将处理csv=
部分(因为这是parse_str()
的主要工作;它解析查询字符串):
$input = 'csv=data%2Cdata%2data%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%2Cdata%0D%0A';
parse_str($input, $pieces);
var_dump($pieces);
输出为:
array(1) {
'csv' =>
string(60) "data,data-ata,data,data,data,data,data,data,data,data,data
"
}
如果您还需要将CSV字符串解析为小段,则可以将其传递给str_getcsv()
:
$fields = str_getcsv($pieces['csv']);
var_dump($fields);
输出:
array(11) {
[0] =>
string(4) "data"
[1] =>
string(8) "data-ata"
[2] =>
string(4) "data"
[3] =>
string(4) "data"
[4] =>
string(4) "data"
[5] =>
string(4) "data"
[6] =>
string(4) "data"
[7] =>
string(4) "data"
[8] =>
string(4) "data"
[9] =>
string(4) "data"
[10] =>
string(4) "data"
}