Вам не нужно 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"
}