将 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);

希望这对您有所帮助。

干杯。