在写入csv之前从表单中删除回车符

时间:2015-04-13 22:32:25

标签: php csv

我有一个php表单,将结果发送到电子邮件,并写入我下载以在openoffice calc中使用的服务器上的csv文件。

邮件工作正常,除了一个方面外,写作也是如此: 当人们使用"输入" key(回车,对吗?)新行被视为openoffice calc中的另一个单元格,或者如果我使用notepad ++打开文件,我会看到不同行上相同字段的行。

如何清理它以便文本区域的内容显示在其单个单元格中?

当人们在字段中使用逗号时我遇到了问题,所以我用管道更改逗号,这似乎修复了那部分。

以下是写入我正在使用的csv文件的代码,如果您需要更多代码,请告诉我。

$fp = fopen('/path-to-file/data.csv', 'a');
fwrite($fp, $name . '|' . $lastname . '|' . $address . '|' . $city . '|' . $country . '|' . $email . '|' . $phone . '|' . $messageone . '|' . $messagetwo . '|' . $comment . '|' . PHP_EOL);
fclose($fp);

更新一个

@Marco 谢谢你的代码,我认为它没有关系,但在完整的代码我有修剪功能,它似乎没有做到这一点,以下是一个更完整的处理文件代码,文件结束使用代码将电子邮件发送给用户和管理员 - 我删除了许多字段,但它们与发布的字段基本相同,正如您所猜测的那样。

    $required = array('name','lastname','address','city'); // more fields here
    $all_okay = TRUE;
    $clean_post = array();
    $error = '';
    foreach($required as $key) {
        if (empty($_POST[$key])){
            $error .= "<br/>$key is a required field\n";
            $all_okay = FALSE;
        }else{
            $clean_post[$key] = $_POST[$key];
            $_SESSION[$key] = $_POST[$key];
        }
    }

    //Name
    }elseif(!preg_match("/^[a-zA-Z' -]{2,}/", trim($_POST['name']))){
        $error .= "<br /><strong>Name does not pass validation</strong>\n";
    //Lastname
    }elseif(!preg_match("/^[a-zA-Z' -]{2,}/", trim($_POST['lastname']))){
        $error .= "<br /><strong>Lastname does not pass validation</strong>\n";
    //Address
    }elseif(!preg_match("/^[a-zA-Z0-9' -]{2,}/", trim($_POST['address']))){
        $error .= "<br /><strong>Address does not pass validation</strong>\n";

    //Continue if no error
    }elseif(empty($error)){ 

        // PREPARE THE DATA 
        $name = Trim(stripslashes($_POST['name']));
        $lastname = Trim(stripslashes($_POST['lastname']));
        $address = Trim(stripslashes($_POST['address']));
        $city = Trim(stripslashes($_POST['city']));

// write to csv file
$fp = fopen('/path-to-file/data.csv', 'a');
fwrite($fp, $name . '|' . $lastname . '|' . $address . '|' . $city . '|' . $country . '|' . $email . '|' . $phone . '|' . $messageone . '|' . $messagetwo . '|' . $comment . '|' . PHP_EOL);
fclose($fp);

        // PREPARE EMAIL BODY TEXT
        $body = '';
        $Admin_body = '';

更新两次

@Marco 谢谢,调试器以相同的方式显示,&#34;错误&#34;。 我可能找到了罪魁祸首,虽然我不知道如何解决它,但你可能会。 问题是除了字段分隔符之外没有文本分隔符。

我尝试添加此功能,但是当电子邮件通过文件时没有写入。

fwrite($fp, '"' . $name . '"|"' . $lastname . '"|"' . $address . '"|"' . $city . '"|"' . $country . '"|"'

我剪切了代码,但是到了最后一个字段(评论)。 而且我也没有把所有修剪过的田地都放好,但它们都被整理了。

文本分隔符的概念来自这里: https://forum.openoffice.org/en/forum/viewtopic.php?f=9&t=76545&p=348709#p348709

更新三

好的,如果遇到同样的问题,这是其他人的解决方案 最后一个片段是在正确的轨道上,但我在其中有一个错误,最后是管道和引号,我添加了EOL。

fwrite($fp, '"' . $name . '|' . $lastname . '|' . $address . '|' . $city . '|' . $country . '|' . $email . '|' . $phone . '|' . $messageone . '|' . $messagetwo . '|' . $comment . '"' . PHP_EOL);

谢谢Marco,您的帮助和耐心,非常感谢。

1 个答案:

答案 0 :(得分:0)

要删除换行符,额外空格等,请使用trim()函数。

在行尾删除逗号,圆点和其他东西也很有用。

请参阅https://php.net/trim

==这是代码==

$name = trim($name);
$lastname = trim($lastname);
$address = trim($address);
$city = trim($city);
$country = trim($country);
$email = trim($email);
$messageone = trim($messageone);
$messagetwo = trim($messagetwo);
$comment = trim($comment);

$fp = fopen('/path-to-file/data.csv', 'a');
fwrite($fp, $name . '|' . $lastname . '|' . $address . '|' . $city . '|' . $country . '|' . $email . '|' . $phone . '|' . $messageone . '|' . $messagetwo . '|' . $comment);
fclose($fp);

许多用户,没有看到额外的空间,认为他们不存在......所以我们程序员必须考虑他们: - )

==更新==

为了更好的调试,您可以将这些行添加到代码中:

// write to csv file
$fp = fopen('/path-to-file/data.csv', 'a');
fwrite($fp, $name . '|' . $lastname . '|' . $address . '|' . $city . '|' . $country . '|' . $email . '|' . $phone . '|' . $messageone . '|' . $messagetwo . '|' . $comment);
fclose($fp);
// your code ends here 
echo "<pre>";
echo "[" . $name . '|' . $lastname . '|' . $address . '|' . $city . '|' . $country . '|' . $email . '|' . $phone . '|' . $messageone . '|' . $messagetwo . '|' . $comment . "]";
echo "</pre";
die ("Debugging - the script stops here");

该脚本将显示在文件中写入的相同字符串,并且&#34; die&#34; (停止)。

如果您在上一个]之前看到回车符,那么它就在$comment的末尾:我注意到您的代码中只修剪了一些变量。