Php在txt文件中写入奇怪字符

Php在txt文件中写入奇怪字符,php,Php,当我执行写在文件上的代码时,我对每个人说: $fileTXT = 'prodotti.txt'; $newfileTXT = 'prodotti_2'.date("d-m-Y_h_m_s").'.txt'; if (!copy($fileTXT, $newfileTXT)) { echo "Impossibile continuare, impossibile creare file TXT."; exit; } $towriteinfile = ""; $fp = fop

当我执行写在文件上的代码时,我对每个人说:

$fileTXT = 'prodotti.txt';
$newfileTXT = 'prodotti_2'.date("d-m-Y_h_m_s").'.txt';

if (!copy($fileTXT, $newfileTXT)) {
    echo "Impossibile continuare, impossibile creare file TXT.";
    exit;
}


$towriteinfile = "";
$fp = fopen($path . $filename, "r") or die("Couldn't open $filename");
$fpTXT = fopen($newfileTXT, 'w') or die("Couldn't open $newfileTXT");

while (!feof($fp)) {
    $line = fgets($fp, 1024);
    $arr = explode("\t", $line);
    $arr[7] = '<img src="http://link/imgHigh/' . $arr[7] . '.jpg" />;';
    echo "Prodotto: ".$arr[4]."<br>";
    foreach ($arr as $fields) {
        fwrite($fpTXT, $fields.";");
    }
    fwrite($fpTXT, "\n");
}

fclose($fpTXT);
fclose($fp);
$fileTXT='prodotti.txt';
$newfileTXT='prodotti_2'.date(“d-m-Y_h_m_s”).txt';
如果(!copy($fileTXT,$newfileTXT)){
echo“不可能的连续文件,不可能的重复文件TXT。”;
出口
}
$towriteinfle=“”;
$fp=fopen($path.$filename,“r”)或die(“无法打开$filename”);
$fpTXT=fopen($newfileTXT,'w')或die(“无法打开$newfileTXT”);
而(!feof($fp)){
$line=fgets($fp,1024);
$arr=分解(“\t”,$line);
$arr[7]=';';
echo“Prodotto:”.$arr[4]。“
”; foreach($arr作为$fields){ fwrite($fpTXT,$fields.“;”); } fwrite($fpTXT,“\n”); } fclose($fpTXT); fclose($fp);
我在txt文件上有这个结果:

175;13563;描述;01;类别等等。。。。。 梅尔卡托。㰻浩⁧牳㵣栢瑴㩰⼯睷⹷獯畣慬楴挮浯椯⽴慣⽴浩䡧杩⽨ ㄀⸀㄀  ⸀砀砀 漀欀ഀ਀樮杰•㸯㬻


图像的html代码是以中文字符编写的,为什么?

是否要将内容从$filename添加到$newFileTXT的末尾

如果是,您应该更改:

$fpTXT = fopen($newfileTXT, 'w') or die("Couldn't open $newfileTXT");


该文件可能被解释为unicode(可能是UTF-8)。在unicode中,字符可以由多个字节组成。读取文件时,只需读取1024个字节,这可能会导致在所读取部分的末尾出现半个unicode字符,另一半出现在下一部分的开头。当您开始在两个字符之间添加新字符时,会出现其他unicode序列,导致文本完全混乱。

我已经解决了问题,我已将任何一行传递给此函数:

function cleanString($string){
    $string = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string);

    return $string;
}
我的旧字符串包含二进制字符,我已经清理了字符串,现在一切正常

function cleanString($string){
    $string = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string);

    return $string;
}