Maison >développement back-end >tutoriel php >Explication détaillée du problème selon lequel fopen ne peut pas créer de fichiers avec des noms de fichiers chinois en PHP

Explication détaillée du problème selon lequel fopen ne peut pas créer de fichiers avec des noms de fichiers chinois en PHP

墨辰丷
墨辰丷original
2018-05-26 14:23:521465parcourir

Cet article présente principalement le problème selon lequel fopen en PHP ne peut pas créer de fichiers avec des noms de fichiers chinois. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Le jeu de graphiques de la page Web précédente utilisait utf-8, et le fichier utilisait également utf-8. Ensuite, le problème est apparu lors de l'utilisation de fopen() pour créer un fichier avec un nom de fichier chinois. tout était tronqué !

J'ai vérifié beaucoup de documents et essayé de nombreuses méthodes, mais je n'ai pas pu le résoudre. Je pensais utiliser d'autres méthodes pour contourner ce problème, mais tout à coup, je me suis rendu compte que le codage de texte par défaut de Windows était ansi. , puis j'ai cherché à nouveau et confirmé. Pour comprendre cela, ma page Web doit également être codée en ansi afin que le nom du fichier créé ne soit pas tronqué.

Ensuite, j'ai commencé à vérifier, j'ai enregistré la page Web avec ansi et j'ai supprimé l'instruction chartset. C'était ok, mais le contenu de la page Web était tronqué. Plus tard, je me suis souvenu que cette page Web incluait également d'autres pages Web, alors je changé l'inclusion La page Web a également été modifiée en ansi pour enregistrer, haha ​​​​tout va bien

La programmation est vraiment un travail qui repose sur l'accumulation Si je n'avais jamais vu que l'encodage par défaut de Windows est ansi, alors ce problème sera résolu en un rien de temps.

ps : c74103531836b0628fb5ad1ece82305d Cette balise méta doit être placée avant b2386ffb911b14667cb8f0f91ea547a76e916e0f7d1e588d4f442bf645aedb2f pour être efficace

Plus tard, j'ai pensé à une meilleure solution. La page Web est toujours codé et enregistré en utf-8, mais encodez simplement le paramètre de nom de fichier dans fopen() séparément. PHP a iconv(), un programme qui modifie l'encodage en convertissant utf-8 en gb2312, vous pouvez éviter les noms de fichiers chinois tronqués <.>

test.htm

<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>标题:{title}</title>
</head>
<body>
<b>此新闻的内容:</b>{content}
</body>
</html>

test.php

<?php

  //实际应用中很可能是查询数据库取内容。
  $rows = array(array("替换标题1","替换内容1"),array("替换标题2","替换内容2"));
  $filename = "tmp.htm";
  foreach($rows as $id => $val){
    $title = $val[0];
    $content = $val[1];
    $pagename = "测试".$id.".html"; 
    //对文件名的编码,避免中文文件名乱码
    $pagename = iconv("UTF-8", "GBK", $pagename); 
    
    //读取模板
    $tmpfile = fopen($filename,"r");
    $string = fread($tmpfile,filesize($filename));
    $string = str_replace("{title}",$title,$string);
    $string = str_replace("{content}",$content,$string);
    fclose($tmpfile);
    //写新文件
    $newpage = fopen($pagename,"w");
    fwrite($newpage,$string);
    fclose($newpage);
    
  }
  echo "创建成功!";
?>

Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.


Recommandations associées :

Comment modifier par lots les noms de fichiers en PHP

Exemple de la fonction de recherche de fichiers de données basée sur nom de fichier implémentée par Python

Python lit nom de fichier Appelez la méthode de génération d'une liste

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!

Déclaration:
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