我正在使用短信API
从我的应用程序发送短信批处理。我首先使用以下两个函数来生成CSV
。
if (!function_exists('output_csv')){
function output_csv($header, $csv_array)
{
$out = fopen('php://output', 'w');
//put csv header
fputcsv($out, $header);
//Put csv content rows
foreach ($csv_array as $row) {
fputcsv($out, $row);
}
fclose($out);
}
}
if (!function_exists('get_csv')){
function get_csv($header, $csv_array)
{
ob_start();
output_csv($header, $csv_array);
return ob_get_clean();
}
}
当我将带引号字符串的数组传递给get_csv()
函数时,我得到这样的结果:
MSISDN,消息
111111111,"你好"
333333333"""你好""再次"
然后,我使用CSV字符串并通过url_encode()
函数输出以下内容:
MSISDN%2Cmessage%0A111111111%2C%22Hi +那里%22%0A333333333%2C%22%22%22Hello%22%22again%22%0A
这会破坏短信并发送到双引号之前的部分。
在API示例中,建议编码字符串应如下所示:
MSISDN,消息%0A%22111111111%22%22Hi +那里%22%0A%22333333333%22%22Hello +试。+这里是+一些+%5C%22quoted +文本%5C%22%5C %0aThis +文本+如下+ A +换行符%22
请注意%22之前的反斜杠%5C。
在我的情况下,反斜杠在通过fputcsv
后被删除我害怕使用str_replace
,因为在有三/四连续双引号的某些情况下它可能会出错。
什么是恢复我逃脱的最佳方式?通过fputcsv
函数后?