Lire un fichier&problème d'encodage?

a marqué ce sujet comme résolu.

Bonjour à tous!

J'essaie de créer une page PHP qui lit un fichier spécifié, et en extrait dans des variables une partie du contenu du fichier.

Par exemple, le fichier contient titre: j'aime les frites, et le but est d'arriver à créer $titre="j'aime les frites" à partir du fichier.

Le problème? Si l'extraction du contenu paraît correcte, il y a en fait un problème: le contenu présente des caractères étranges.

La partie php:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php

//Cette fonction recherche dans un fichier la valeur d'une variable
function getValue($property, $defaultValue, $lengthOfFile, $file)
{
    $value=$defaultValue; //on initialise la valeur retournée

    for($i=0;$i<$lengthOfFile;$i++) //pour chaque ligne du fichier à compiler
    {
        $isValue=strpos($file[$i],$property); //FALSE si, dans la ligne actuelle, il n'y a pas de "property: "
        if(is_int($isValue)&&$isValue==0) //Si $isTitle est un entier et est égal à 0 (donc ni FALSE ni plus loin sur la ligne), on extrait la suite de la ligne comme étant la valeur de la propriété concernée de la page à créer
        {
            $value=substr($file[$i],strlen($property)); //$valeur égal à la portion de la ligne après $property
        }
    }
    return $value;
}

//Prend une chaîne de charactères et renvoie un nom de dossier
function toFolder($title)
{
    $title = strtolower($title);
    $title = urlencode($title);
    $title = str_replace("+","-",$title);
    $title = str_replace(" ","",$title);
    $title.="/";
    return $title;
}


$nomDuFichier="page.page"; //bien entendu, l'obtention de $nomDuFichier se fera d'une manière différente, cette assignement se fait juste pur montrer le problème

$file = file($nomDuFichier);
$fileLength = count($file);

    echo("<p>L'array file: <br/>");
    print_r($file);
    echo("</p>");

//extraction de la première variable
$titreParDefaut="Titre non défini";//définition de la valeur de la variable 1 par défaut
$titre=getValue("titre: ", $titreParDefaut, $fileLength, $file); //Définition du titre

//extraction de la deuxième variable
$langueParDefaut="";//définition de la langue par défaut
$langue=getValue("langue: ", $langueParDefaut, $fileLength, $file); //Définition de la langue

$titreAdresse = toFolder($titre);

$langueAdresse = toFolder($langue);

$chemin="../".$langueAdresse.$titreAdresse;

echo("<p>Le chemin est: <br/>");
echo($chemin);
echo("</p>")


?>

Le fichier sur lequel le script php travaille:

1
2
titre: j'aime les frites
langue: francais

Voilà ce que j'obtiens après l'execution du script :( : https://drive.google.com/file/d/0B3nZPoqzJdDJZkFUN09aR3piNWM/view

Merci de votre aide! En espérant ne pas avoir été trop long…

(J'ai essayé de changer l'encodage de UTF8 en ANSI mais ça change rien… )

Éviter les caractères spéciaux dans un chemin. Que tu obtiennes ça est parfaitement normal compte tenu que le nom de ton fichier contient une ' ce qui est fortement déconseillé, tu comprends pourquoi maintenant. Pour les noms de fichier, limite toi aux lettres de l'alphabet, aux nombres et a ces deux tirets : - et _.

Le %0D%0A c'est le CR+LF (\r\n) en fin de ligne dans ton fichier. file a l'option FILE_IGNORE_NEW_LINES pour ne pas les inclure.

Et avec un urlencode, c'est normal que la ' devienne %27.

HS : c'est surtout sous Windows que ça devient marrant avec des caractères accentués : si la chaîne est encodée en UTF-8, PHP ne trouvera pas le fichier sans la reconvertir en CP1252 ou utiliser une extension qui gère l'UTF-8 (com ou php-wfio).

+2 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte