2016-07-19 4 views
2

Bonjour J'ai un problème dans mon code PHP: je dois ouvrir un fichier txt en utilisant file_get_content, le répertoire dans le fichier txt contient des caractères arabes mon code:php file_get_content caractères arabes

$URLX = "C:/server files/BN/public_html" ; 
$BookName = "الإضافةإلىمفاوضةمالكحسون" ; 
$eachChapiter[$x] = "مالكمالكحسون" ; 

$content = file_get_contents($URLX."/".$BookName."/".str_replace(' ', '', $eachChapiter[$x]).".txt"); 

l'erreur sortie:

WARNING: FILE_GET_CONTENTS(C:/SERVER FILES/BN/PUBLIC_HTML/الإضافةإلىمفاوضةمالكحسون/مالكمالكحسون.TXT): FAILED TO OPEN STREAM: NO SUCH FILE OR DIRECTORY IN C:\XAMPP\HTDOCS\LIBRARY\SEARCH\SEARCH.PHP ON LINE 30 

NOTICE: UNDEFINED OFFSET: 1 IN C:\XAMPP\HTDOCS\LIBRARY\SEARCH\SEARCH.PHP ON LINE 38 
+1

php n'est pas conscient d'Unicode. vous ne pouvez pas utiliser les fonctions de chaîne standard de php sur du texte Unicode sans détruire le texte. utiliser les fonctions 'mb _ *()' à la place, qui sont conscientes d'unicode –

+1

Selon [cette question et réponse] (http://stackoverflow.com/questions/708017/can-a-php-file-name-or- un-dir-dans-son-plein-chemin-ont-utf-8-caractères), les fonctions de fichiers de PHP ne peuvent pas ouvrir les fichiers qui ont des chemins avec des caractères en dehors de ISO-8859-1. L'arabe ne fait pas partie de cet encodage, donc ce n'est pas possible. La famille de fonctions 'mb _ *()' ne vous aidera pas ici. –

Répondre

1

Merci @Mike pour m'aider à corriger la réponse. Donc Selon la question et l'OS de OP, il semble que vous (OP) rencontriez une variante de l'erreur this.

Et comme discuté sur ce lien, vous pouvez utiliser le code suivant pour détecter le nom du fichier encodage

...  

$final_url = $URLX."/".$BookName."/".str_replace(' ', '', $eachChapiter[$x]); 

mb_detect_encoding($final_url, 'UTF-8', true)) ? utf8_decode($final_url) : $final_url; 
$content = file_get_contents($final_url).".txt"); 

Rappelez-vous que ce code va créer des problèmes (encore une fois discuté sur ce lien) sur un serveur Linux. Donc, si vous utilisez un environnement de production Linux, vous pouvez appliquer la solution proposée ici.

+0

Hmmm ... je ne sais pas si cela s'applique à * ce * cas, où le problème semble avoir à voir avec un nom de fichier arabe *. * Il me semble que l'autre réponse pourrait être plus proche de la marque dans * ce * cas, bien que je convienne que votre réponse pourrait être appropriée dans * d'autres * cas où des chaînes multinationales sont utilisées. –

+0

Utilisez-vous Windows OS? –

+0

Suggère que vous modifiez votre réponse une fois de plus: "Utilisez-vous Windows OS?" Il me semble que c'est *. Donc, éditez votre réponse pour nous dire juste * ce que vous pensez être pertinent, "en supposant" que c'est, en effet, Windows. **: -) ** * "Utilisez-vous Windows OS? Parce que, si oui ..." * (etc) –