将 PHP 输出用引号引起来
Enclose PHP output in quotation marks
我们有一个 PHP 脚本可以将订单导出到 .csv 文件。我们导出的系统也要求每个字段都用引号括起来。
这是我们设置每个字段的代码。
$order_data = array(
'type' => "H",
'order_type' => 'HOME',
'order_date' => $order->order_date,
'account_code' => "REAL",
'document_reference' =>'',
'reference1'=>'',
'reference2'=>'',
'delivery_addess_code'=> '',
'billing_first_name' => $order->billing_first_name ." ".$order->billing_last_name,
'billing_address_1' => $order->billing_address_1 ." ".$order->billing_address_2,
'billing_postcode' => $order->billing_postcode,
'delivery_tel_no'=> $order->billing_phone,
'delivery_contact'=> $order->billing_first_name,
这输出;
H,HOME,"2015-05-13 13:19:46",REAL,,,,,"Ben Bull","Address 1 Address2",
有些被“”包围,有些则不是,我们如何让它们全部成为?
尝试强制所有类型的字符串如下:
'order_type' => (string) 'HOME'
对于 CSV 输出,您需要用双引号将所有值括起来。此外,如果值中有双引号,您需要使用两个连续的双引号来转义这些双引号。这就是 CSV 的工作原理。
检查下面这个 PHP 函数。
function makeCSV($value) {
//Encloses each token (Before and after)
$CSV_TOKEN_ENCLOSER = '"';
//Used to escape the enclosing character if inside the token
$CSV_TOKEN_ENCLOSER_ESCAPER = '""';
//Escape the encloser inside the value
$csv_value = str_replace($CSV_TOKEN_ENCLOSER, $CSV_TOKEN_ENCLOSER_ESCAPER, $value);
//Enclose the value
$csv_value .= $CSV_TOKEN_ENCLOSER . $csv_value . $CSV_TOKEN_ENCLOSER;
//Return
return $csv_value;
}
这就完成了我在第一段中解释的工作。你可以在你的情况下使用它:
$order_data = array(
'type' => makeCSV("H"),
'order_type' => makeCSV('HOME'),
'order_date' => makeCSV($order->order_date),
...
);
但是,看起来您的代码自动为您将订单对象的值括在引号内。我建议您避免使用该代码,将其替换为上面介绍的 makeCSV 函数的用法,然后最后使用标准 PHP 内爆调用来获取 CSV,如下所示:
$comma_separated_csv = implode(",", $order_data);
希望这对您有所帮助。
干杯。
我们有一个 PHP 脚本可以将订单导出到 .csv 文件。我们导出的系统也要求每个字段都用引号括起来。
这是我们设置每个字段的代码。
$order_data = array(
'type' => "H",
'order_type' => 'HOME',
'order_date' => $order->order_date,
'account_code' => "REAL",
'document_reference' =>'',
'reference1'=>'',
'reference2'=>'',
'delivery_addess_code'=> '',
'billing_first_name' => $order->billing_first_name ." ".$order->billing_last_name,
'billing_address_1' => $order->billing_address_1 ." ".$order->billing_address_2,
'billing_postcode' => $order->billing_postcode,
'delivery_tel_no'=> $order->billing_phone,
'delivery_contact'=> $order->billing_first_name,
这输出;
H,HOME,"2015-05-13 13:19:46",REAL,,,,,"Ben Bull","Address 1 Address2",
有些被“”包围,有些则不是,我们如何让它们全部成为?
尝试强制所有类型的字符串如下:
'order_type' => (string) 'HOME'
对于 CSV 输出,您需要用双引号将所有值括起来。此外,如果值中有双引号,您需要使用两个连续的双引号来转义这些双引号。这就是 CSV 的工作原理。
检查下面这个 PHP 函数。
function makeCSV($value) {
//Encloses each token (Before and after)
$CSV_TOKEN_ENCLOSER = '"';
//Used to escape the enclosing character if inside the token
$CSV_TOKEN_ENCLOSER_ESCAPER = '""';
//Escape the encloser inside the value
$csv_value = str_replace($CSV_TOKEN_ENCLOSER, $CSV_TOKEN_ENCLOSER_ESCAPER, $value);
//Enclose the value
$csv_value .= $CSV_TOKEN_ENCLOSER . $csv_value . $CSV_TOKEN_ENCLOSER;
//Return
return $csv_value;
}
这就完成了我在第一段中解释的工作。你可以在你的情况下使用它:
$order_data = array(
'type' => makeCSV("H"),
'order_type' => makeCSV('HOME'),
'order_date' => makeCSV($order->order_date),
...
);
但是,看起来您的代码自动为您将订单对象的值括在引号内。我建议您避免使用该代码,将其替换为上面介绍的 makeCSV 函数的用法,然后最后使用标准 PHP 内爆调用来获取 CSV,如下所示:
$comma_separated_csv = implode(",", $order_data);
希望这对您有所帮助。
干杯。