当前位置: 首页 > 面试题库 >

如何使用UTF-8字符串在PHP中使用文件系统功能?

陆正奇
2023-03-14
问题内容

我不能使用mkdirUTF-8字符创建文件夹:

<?php
$dir_name = "Depósito";
mkdir($dir_name);
?>

当我在Windows资源管理器中浏览此文件夹时,文件夹名称如下所示:

Depósito

我该怎么办?

我正在使用php5


问题答案:

只是urlencode所需的字符串作为文件名。 从中返回的 所有
字符urlencode在文件名(NTFS / HFS /
UNIX)中均有效,然后您可以urldecode将文件名改回UTF-8(或它们使用的任何编码)。

注意事项(同样适用于以下解决方案):

  • 进行网址编码后,文件名必须少于255个字符(可能是字节)。
  • UTF-8具有许多字符的多种表示形式(使用组合字符)。如果您不对UTF-8进行标准化,则可能无法搜索glob或重新打开单个文件。
  • 您不能依赖scandir或类似功能进行alpha排序。urldecode然后,您必须使用文件名,然后使用了解UTF-8(和归类)的排序算法

更糟糕的解决方案

以下是不太吸引人的解决方案,更复杂,并且有更多警告。

在Windows上,PHP文件系统包装程序期望并返回ISO-8859-1字符串作为文件/目录名称。这给您两个选择:

  1. 在文件名中自由使用UTF-8,但要了解,非ASCII字符在PHP外部将 显示为错误 。非ASCII UTF-8字符将存储为多个 单个 ISO-8859-1字符。例如,ó将出现ó在Windows资源管理器中。

  2. 将文件/目录名称限制为ISO-8859-1中可以表示的字符。实际上,您将utf8_decode]在文件系统功能中使用UTF-8字符串之前先传递它们,然后传递条目scandir使您utf8_encode获得UTF-8中的原始文件名。

注意事项!

  • 如果传递给文件系统功能的任何 字节 与ISO-8859-1 中的无效Windows文件系统字符相匹配,则表示您不走运。
  • Windows 可能 在非英语语言环境中使用ISO-8859-1以外的编码。我想它通常是ISO-8859-#之一,但这意味着您需要使用mb_convert_encoding而不是utf8_decode


 类似资料:
  • 问题内容: 如何使用索引逐个字符地迭代UTF-8字符串? 使用方括号运算符访问UTF-8字符串时,utf编码的字符包含2个或更多元素。 例如: 但我想拥有: 有可能,但是这非常慢,即。 是否有另一种无需使用字符就可以逐字符插入字符串的方法? 问题答案: 使用preg_split。使用“ u”修饰符, 它支持UTF-8 Unicode。

  • 问题内容: 我目前正在从事一个项目,我不使用常规的MySQL查询,而是继续学习如何使用PDO。 我有一个称为参赛者的表,数据库,表和所有列均位于utf-8中。我的参赛者表中有10个条目,而它们的“名称”列中包含诸如åäö之类的字符。 现在,当我从数据库中获取一个条目并使用var_dump的名称时,我得到了一个很好的结果,即一个包含所有特殊字符的字符串。但是我需要做的是按字符分割字符串,将它们放入数

  • 问题内容: 我有这样的 unicode : 我知道这是字符串代表其进行编码 请注意,字符串本身是 如何将其解码为真实字符串? 问题答案: 如果您打印了字符串的输出,那么您似乎有一个 Mojibake ,使用错误的编码对字节数据进行了解码。 首先编码回字节,然后使用正确的编解码器解码。这可能像编码Latin-1一样简单: 但是,这取决于如何应用错误的解码。如果使用Windows代码页(如CP1252

  • 我试图让两个连字符触发短破折号,三个连字符触发长破折号;喜欢 除了工作。以下是我的收获: 这部作品(11部产生2111部产生3部) 这是同一个脚本,但“1”已被替换为“-”,“2”已被替换为“-”,而“3”已被替换为“-“--”-“应该生成”-“和“--”应该生成”-”,但它不起作用,因为我使用的版本中不完全支持Unicode(AutoHotKey.com上的AutoHotKey_L v1.1.0

  • 问题内容: 我想知道是否有可能在文件只是字符串的情况下发布文件以及其他表单数据? 我知道您可以通过在文件路径前面加上“ @”前缀来发布文件系统中已经存在的文件。 但是,我想绕过创建一个临时文件,而仅将该文件作为字符串发送,但是我不确定如何在PHP中使用cURL构造请求。 干杯 问题答案: 应该可以:这是通过浏览器发布的表格(忽略了不相关的字段): 因此,如果我们自己构建POST主体并设置一个或多个

  • 问题内容: 我正在尝试读取UTF-8编码的txt文件,其中包含一些土耳其字符。基本上,我已经编写了一个基于轴的Web服务,该服务读取此文件并将输出作为字符串发送回。不知何故我无法正确读取字符。代码非常简单,如下所述: 这是turkish.txt的内容,仅一行 我得到标准输出 请在这里提出我在做什么错。 问题答案: 您似乎正在正确地将文件数据从UTF-8字符串解码为UTF-16字符串。 执行从UTF