PHP - Télécharger utf-8 nom de fichier
Je suis Vietnamienne et je veux télécharger un utf-8 nom de fichier comme
Tên Tệp Tiếng Việt.JPG
Voici mon code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>utf-8</title>
</head>
<body>
<?php
if(isset($_POST["submit"])) {
if($_FILES["upload"]["error"] > 0 ) echo "FILE ERROR!";
else
{
$base_dir = "D:/";
$fn = $_FILES["upload"]["name"];
$fn2 = $base_dir.$fn;
move_uploaded_file($_FILES["upload"]["tmp_name"],$fn2);
}
}
?>
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<input type="file" name="upload" id="upload" />
<input type="submit" name="submit" id="submit" value="Send" />
</form>
</body>
</html>
mais quand je télécharge ce que je vois sur mon ordinateur D:\ a un fichier comme
Tên Tệp Tiếng Việt.JPG
Comment résoudre que grâce
- Sur Windows, vous pouvez utiliser iconv() pour la convertir en ucs2
- J'essaie ` $fn2 = iconv("UTF-8","ucs2", $base_dir.$fn) ; "mais erreur iconv(): Mauvais jeu de caractères, de conversion de
UTF-8' to
ucs2" n'est pas autorisé ? - C'est
UCS-2
en fait 🙂 - j'ai modifier que pour $fn2 = iconv("UTF-8","UCS-2", $base_dir.$fn); mais je reçois l'erreur
move_uploaded_file(): Filename cannot be empty ..
etmove_uploaded_file(): Unable to move 'E:\PHP\Xampp\tmp\php6B2C.tmp' ...
? ce qui est faux - Système d'exploitation que vous utilisez. Avec votre code de vérification, vous les paramètres système aussi parce que le code de la partie elle l'air bien, mais à l'os, je ne suis pas sûr de vous permettre toutes les choses
- Je l'aide window8, anglais US clavier ?
- Premières choses d'abord. Pouvez-vous
echo
le nom de fichier que vous recevez sur le serveur? Tester si le nom de fichier est téléchargé encodés en UTF-8? Parce que cette partie est susceptible de travailler. Le problème est de savoir comment PHP interagit avec le système de fichiers lors de l'écriture des fichiers, qui dépend fondamentalement de ce que le système de fichiers sous-jacent, ce qui peut être assez laid et complexe dans le cas de Windows. Si le nom de fichier est téléchargé fine en UTF-8, la question devient "comment écrire un nom de fichier en UTF-8", et la réponse peut ne pas être assez.
Vous devez vous connecter pour publier un commentaire.
Je suis sur Windows 8 version chinoise, et je traite avec un problème similaire avec ce:
cp
signifieCode page
etcp936
signifie Code de la page 936, qui est la page de code par défaut de la version chinois simplifié de Windows.Donc je pense que peut-être que votre problème pourrait être résolu de la même manière:
je ne suis pas très sûr que la page de code par défaut de votre système d'exploitation est
1258
ou pas, vous devriez vérifier par vous même en ouvrant l'invite de commande et tapez la commandechcp
. Puis changement1258
à ce que la commande vous donner.Mise à JOUR
Il semble que PHP les fonctions de fichiers ne peut gérer que les caractères qui sont dans le système de page de codes, selon cette réponse. Si vous avez 2 choix s'offrent à vous:
Limite de caractères dans le nom du fichier à système de codes - dans votre cas, c'est
437
. Mais je suis assez sûr que la page de code 437 ne comprend pas tous les vietnamiens caractères.Changer votre système de codes à la vietnamienne un:
1258
et de convertir le nom du fichier àcp1258
. Ensuite, les fonctions de fichiers devrait fonctionner.Les deux choix sont déficientes:
Choix 1: Vous ne pouvez pas utiliser les caractères vietnamiens plus, ce qui n'est pas ce que vous voulez.
Choix 2: Vous avez à système de changement de page de code, et le nom de fichier caractères sont limités à la page de code 1258.
Mise à JOUR
Comment modifier la page de code système:
Aller à
Control Panel
>Region
>Administrative
>Change system locale
et sélectionnezVietnamese(Vietnam)
dans le menu déroulant.Active code page: 437
, et je change de$fn2 = iconv("UTF-8","cp437", $base_dir.$fn);
et donner d'erreur commeNotice: iconv(): Detected an illegal character in input string in
et un avertissement commeWarning: move_uploaded_file(): Filename cannot be empty
...?cp1258
, peut-être?1258
. Le premier je viens de changer deHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCP
. Mais la seconde, je ne peux pas trouverAutorun
dansHKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\Autorun
?Command Processor
et mettre@chcp 1258>nul
valeur. après j'ai redémarré mon ordinateur et le typechcp
surcmd
et obtenirActive code page: 1258
Mais lorsque je lance le télécharger à nouveau, puis il n'est pas encore le vietnamien nom de fichier 🙁Ce
meta
n'a aucun effet:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
parce que le serveur web a déjà envoyé
Content-Type
en-tête, et a donc décidé que l'encodage sera. Les navigateurs Web envoyer formes dans le même encodage. Lemeta
est utile lorsque l'utilisateur est hors-ligne.De sorte que vous avez à la sned en-tête http
Content-Type
par vous-même:assurez-vous de mettre ce avant tout code html, le contenu ou tout ce qui est envoyé.
Sinon,
accept-charset
tag surform
devrait fonctionner ainsi:content-type
en-tête. Est-il uncharset
? Vous pouvez aussi essayer d'ajouteraccept-charset="utf-8"
à<form>
Net>All>Headers>Response Headers
et je voisContent-Type text/html; charset=utf-8
surResponse Headers
. J'essaie d'ajouteraccept-charset="utf-8"
, mais ne fonctionne pas. Voici monupload.php
fichier jsfiddle.net/nnBwVcontent-type
dansRequest Hedears
, prendre un coup d'oeil.Request Headers From Upload Stream
aContent-Type multipart/form-data; boundary=---------------------------18199138701329
??charset
, ce qui signifie qu'il est le même que la page est. Mon principal suspect est maintenant que votre fichier n'est pas enregistré en tant que utf-8 - vérifiez, vérifiez également la directive php ini appelédefault_charset
. Ok, accédez àPost
onglet et trouversource
catégorie et la ligne qui ressemble à ceci:Content-Disposition: form-data; name="upfile"; filename="your_file.txt"
Est le nom de l'encodage correct ?;default_charset = "UTF-8"
. je ne comprends pas votre moyennenavigate to Post tab and find ..
qu'est-ce quePost
onglet?;
dans le php.ini. Je voulais Poster onglet dans firebug;
mais il ne fonctionne toujours pas. Je ne trouve pas l'onglet nom dePost
🙁La seule solution j'ai trouvé jusqu'à présent.. (année 2014):
1) je n'ai pas de stocker des fichiers sur mon FTP dans chaîne UTF-8. Au lieu de cela, j'utilise cette fonction, pour renommer les fichiers téléchargés:
2) Maintenant, vous pouvez renommer (ou etc)
$newname
;Je suis un persan et j'ai le même problème avec les caractères utf-8 dans ma langue.
J'ai pu résoudre mon problème avec ce code:
Je ne suis pas sûr sur vientam langue, mais peut-être que vous pouvez utiliser le même code que ci-dessus avec quelques modifications:
Pour commencer, obtenir la détection de nom de fichier de codage (avant de les télécharger).
Insérez le nom du fichier à décodeur et vérifiez l'encodage.
Désolé! votre question est à propos du nom de fichier.
Vous devez enregistrer le nom de votre fichier avec iconv, mais le lire sans cette.
pour l'enregistrement:
pour la lecture:
essayer cette
Vous pouvez utiliser cette
Tên Tệp Tiếng Việt.JPG
🙁