2010-05-16 3 views
0

Возможно, я смотрю на это неправильно, но у меня есть форма, которая делает свою вещь (отправляет электронные письма и т. Д.), Но я также добавил код, чтобы сделать простой файл csv с плоским файлом с некоторыми из пользователь ввел данные.Закрытие двойных кавычек в массиве

Если пользователь случайно вставил, например, «himynameis», «bob», это либо сломало бы строку csv (поскольку кавычки не были инкапсулированы), либо если я использую htmlspecialchars() и stripslashes() для данных, В итоге я получил уродливое значение данных 'himynameis","bob'.

Мой вопрос, как я могу обрабатывать входящие данные для удовлетворения «"»быть представлена ​​в виде, не нарушая мой файл CSV?

это мой код для создания файла журнала в формате CSV.

@$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 

Вот пример входящего массива данных:

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

) 

ТВВ

Jared

ответ

2

Вы можете изменить любой " при вводе пользователем "". Это рекомендуется с помощью RFC 4180 и будет корректно обрабатываться OpenOffice Calc и Excel среди других программ.

Вы можете использовать str_replace для этого. Это, вероятно, будет немного быстрее, чем preg_replace:

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

да, если я инкапсулировать двойные кавычки с более doublequotes, CSV-отлично (я знаю, что) я спрашиваю, как я могу это сделать. Я думаю, может быть, preg_replace, или есть другой способ? – Jared

+0

легенда мат, ура! – Jared