Dizideki çift tırnak çevreleyen

1 Cevap php

Bunda yanlış bir yol arıyor olabilir, ama ben onun şeyi yapar bir form var (e-posta vs vs gönderir) ama ben de ayrıntıları girilen kullanıcı bazı basit flatfile csv kaydını yapmak için bazı kod koymak.

Bir kullanıcı yanlışlıkla '"," bob himynameis' Örneğin koyar eğer (tırnak kapsüllü değildi çünkü) bu csv satır kıracak ya da ben veri htmlspecialchars () ve stripslashes () kullanırsanız, ben sonuna kadar Bir çirkin veri değeri 'himynameis","bob'.

Benim soru nasıl '"' karşılamak üzere gelen veri işleyebilir Benim csv dosyayı bozmadan şeklinde konduğunu? Olduğunu

Bu csv günlük dosyası oluşturmak için benim kodudur.

@$name = htmlspecialchars(trim($_POST['name']));
@$emailCheck = htmlspecialchars(trim($_POST['email']));
@$title = htmlspecialchars(trim($_POST['title']));
@$phone = htmlspecialchars(trim($_POST['phone']));


function logFile($logText)
{

    $path = 'D:\logs';
    $filename = '\Log-' . date('Ym', time()) . '.csv';
    $file = $path . $filename;

    if(!file_exists($file))
    {
        $logHeader = array('Date', 'IP_Address', 'Title', 'Name', 'Customer_Email', 'Customer_Phone', 'file');

        $fp = fopen($file, 'a');        

            fputcsv($fp, $line);

    }

    $fp = fopen($file, 'a');


    foreach ($logText as $record) {
    fputcsv($fp, $record);
}




}

//Log submission to file
        $date = date("Y/m/d H:i:s");
        $clientIp = getIpAddress(); //get clients IP address
        $nameLog =  stripslashes($name);
        $titleLog  = stripslashes($title);

        if($_FILES['uploadedfile']['error'] == 4) $filename = "No file attached."; //check if file uploaded and return
        $logText = array(array("$date", "$clientIp", "$titleLog", "$nameLog", "$emailCheck", "$phone", "$filename"));

        logFile($logText); //write form details to log

İşte gelen dizi verileri bir örnek:

Array
(
    [0] => Array
        (
            [0] => 2010/05/17 10:22:27
            [1] => xxx.xxx.xxx.xxx
            [2] => title
            [3] => """"himynameis","bob"
            [4] => example@example.com
            [5] => 346346
            [6] => No file attached.
        )

)

TIA

Jared

1 Cevap

Sen "" için kullanıcı girişi herhangi bir " değiştirebilirsiniz. Bu RFC 4180 tarafından tavsiye edilir, ve diğer programlar arasında, OpenOffice Calc ve Excel tarafından doğru ele alınacaktır.

Bunun için str_replace kullanabilirsiniz. Muhtemelen preg_replace biraz daha hızlı olacaktır:

function csv_quote_escape($input)
{
  return str_replace('"', '""', $input);
}