Pourquoi mon code PHP ne parvient-il pas à supprimer la nomenclature des fichiers CSV ?

Susan Sarandon
Libérer: 2024-11-03 05:36:02
original
372 Les gens l'ont consulté

Why Does My PHP Code Fail to Remove BOM from CSV Files?

Suppression de la nomenclature du fichier .csv après l'importation : dépannage

Lors de l'importation de fichiers .csv, il est essentiel de supprimer la marque d'ordre des octets ( BOM) pour garantir l’intégrité et la compatibilité des données. Cependant, vous avez mentionné que vos tentatives d'utilisation de preg_replace et str_replace ont échoué. Analysons votre code et explorons une approche alternative.

Votre code commence par ouvrir le fichier CSV pour le lire à l'aide de fopen. Vous essayez ensuite de prétraiter les lignes à l'aide de fgetcsv et de les convertir en UTF-8 à l'aide de utf8_encode. Cependant, la suppression de la nomenclature est manquante dans cette section.

La solution fournie suggère d'ajouter une fonction appelée removeBomUtf8 pour supprimer explicitement la nomenclature, qui apparaît généralement sous la forme des trois premiers octets 0xEF, 0xBB et 0xBF en UTF-8. fichiers codés. Vous pouvez appeler cette fonction sur le contenu du fichier avant un traitement ultérieur.

De plus, votre code écrase le fichier CSV d'origine avec les données modifiées, ce qui peut affecter les opérations ultérieures. Pour éviter cela, envisagez de créer un fichier temporaire, d'y modifier les données, puis de le déplacer vers l'emplacement d'origine.

Voici une version mise à jour de votre code intégrant la fonction de suppression de nomenclature et la prévention de l'écrasement des fichiers :

<code class="php">function removeBomUtf8($s){
    if(substr($s,0,3)==chr(hexdec('EF')).chr(hexdec('BB')).chr(hexdec('BF'))){
        return substr($s,3);
    }else{
        return $s;
    }
}

setlocale(LC_ALL, 'nl_NL');
ini_set('auto_detect_line_endings',TRUE);
require_once(ABSPATH.'wp-admin/includes/file.php' );

$path = get_home_path();
$filepath = $path .'wp-content/themes/pon/testing.csv';
$content = file_get_contents($filepath);
file_put_contents($filepath, str_replace("\xEF\xBB\xBF",'', $content));

// Create temporary file
$tempfile = tempnam(sys_get_temp_dir(), 'csv_');
fopen($tempfile, "w");

// Process lines and remove BOM
$file = fopen($filepath, "r") or die("Error opening file");
while(($line = fgetcsv($file, 1000, ";")) !== FALSE) {
    fputcsv(fopen($tempfile, 'w'), $line);
}

// Move temporary file to original location
fclose($file);
unlink($filepath);
rename($tempfile, $filepath);

// Continue your processing
...</code>
Copier après la connexion

Cette approche devrait supprimer efficacement la nomenclature, empêcher les écrasements de fichiers et préserver les fonctionnalités de votre code d'origine.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal