Php打印数组到逗号分隔、带引号的txt文件

Php打印数组到逗号分隔、带引号的txt文件,php,arrays,fopen,Php,Arrays,Fopen,我有一个这样的数组 $rowArray = array( array( "http://www.website.com/article.html", "09/18/2013", "An article about stuff" ), array( "http://www.google.com", "09/18/2013", "The Google", ) ); 我想制

我有一个这样的数组

$rowArray = array(
    array(
        "http://www.website.com/article.html",
        "09/18/2013",
        "An article about stuff"
    ),
    array(
        "http://www.google.com",
        "09/18/2013",
        "The Google",
    )
);
我想制作一个.txt文件,如下所示:

http://www.website.com/article.html,09/18/2013,"An article about stuff"\r\n
http://www.google.com,09/18/2013,"The Google"\r\n
请注意带空格和逗号的字符串周围的“引号”,以及\r\n返回值

我尝试过:(我将标题设置在其他位置,并设置好标题)

还有这个

$row[] = "\r\n";
fwrite($op, implode(",",$row));
echo mb_convert_encoding(implode(",", $row) . "\r\n", 'UTF-8');
还有这个

$row[] = "\r\n";
fwrite($op, implode(",",$row));
echo mb_convert_encoding(implode(",", $row) . "\r\n", 'UTF-8');
我需要转换它,因为我的数据库中有从web上刮取的字符,文本编辑器需要UTF-8。有人能帮我吗?我似乎无法获得双引号和\r\n以及“引号”。提前谢谢。

试试看

foreach ($rowArray as $row){
    $row[2] = '"' . $row[2] . '"';
    fwrite($op, implode(',', $row) . "\r\n");
}
好的,这是我需要的

  • UTF-8的字符编码
  • 的行结尾\r\n
  • 用空格或逗号在字符串周围加双引号,这样就不会破坏csv格式(即使我将其保存为txt文件)
我最后做的是重写fputcsv函数。我只更改了三行,并在下面留下了评论,以便您可以看到我更改的内容

protected function _putcsv(&$handle, $fields = array(), $delimiter = ',', $enclosure = '"') {
    $str = '';
    $escape_char = '\\';
    // I changed $value to $valueRaw so I could convert it easily
    foreach ($fields as $valueRaw) {
        // I added this line to convert to UTF-8 to set the $value variable
        $value = mb_convert_encoding($valueRaw, 'UTF-8');
        if (strpos($value, $delimiter) !== false ||
                strpos($value, $enclosure) !== false ||
                strpos($value, "\n") !== false ||
                strpos($value, "\r") !== false ||
                strpos($value, "\t") !== false ||
                strpos($value, ' ') !== false) {
            $str2 = $enclosure;
            $escaped = 0;
            $len = strlen($value);
            for ($i = 0; $i < $len; $i++) {
                if ($value[$i] == $escape_char) {
                    $escaped = 1;
                } else if (!$escaped && $value[$i] == $enclosure) {
                    $str2 .= $enclosure;
                } else {
                    $escaped = 0;
                }
                $str2 .= $value[$i];
            }
            $str2 .= $enclosure;
            $str .= $str2 . $delimiter;
        } else {
            $str .= $value . $delimiter;
        }
    }
    $str = substr($str, 0, -1);
    // I changed the string ending from just "\n" to "\r\n"
    $str .= "\r\n";
    return fwrite($handle, $str);
}
protectedfunction\u putcv(&$handle,$fields=array(),$delimiter=',',$enclosure='){
$str='';
$escape\u char='\\';
//我将$value更改为$valueRaw,以便可以轻松地进行转换
foreach($valueRaw形式的字段){
//我添加了这一行来转换为UTF-8,以设置$value变量
$value=mb_convert_编码($valueRaw,'UTF-8');
if(strpos($value,$delimiter)!==false||
STRPO($value,$enclosure)!==false||
strpos($value,“\n”)!==false||
strpos($value,“\r”)!==false||
strpos($value,“\t”)!==false||
STRPO($value',)!==false){
$str2=$enclosure;
$s=0;
$len=strlen($value);
对于($i=0;$i<$len;$i++){
如果($value[$i]=$escape\u char){
$s=1;
}else if(!$escape&&$value[$i]==$enclosure){
$str2.=$enclosure;
}否则{
$s=0;
}
$str2.=$value[$i];
}
$str2.=$enclosure;
$str.=$str2.$delimiter;
}否则{
$str.=$value.$delimiter;
}
}
$str=substr($str,0,-1);
//我将以“\n”结尾的字符串更改为“\r\n”
$str.=“\r\n”;
返回fwrite($handle,$str);
}
问题解决了。谢谢你的回答