Php 上载文件时出现特殊(复合)字符问题
我正在通过表单上传包含特殊字符的文件名。似乎在某种程度上,当文件被发送时,名称被更改了 这对我来说是有问题的,因为我想根据预先确定的列表检查给定的名称。只要不使用像å/ä/ö这样的特殊(复合)字符,一切都很好。我怎样才能解决这个问题 表格:Php 上载文件时出现特殊(复合)字符问题,php,html,Php,Html,我正在通过表单上传包含特殊字符的文件名。似乎在某种程度上,当文件被发送时,名称被更改了 这对我来说是有问题的,因为我想根据预先确定的列表检查给定的名称。只要不使用像å/ä/ö这样的特殊(复合)字符,一切都很好。我怎样才能解决这个问题 表格: <form name="uploadForm" id="uploadForm" method="POST" enctype='multipart/form-data'> <
<form name="uploadForm" id="uploadForm" method="POST" enctype='multipart/form-data'>
<label class="upload" for="upload">Choose file(s) to upload</label>
<input type="file" name="upload[]" id="upload" accept=".m4a" multiple required>
<button type="submit" name='submit' id="submit">Save</button>
</form>
上传似乎会影响复合字符“ö”
提前谢谢 你想要国际的
注:
是默认值,仅供参考FORM_C
仅用于转义unicode以便于查看json\u encode()
$input='rör.m4a';
瓦鲁垃圾场(
json_encode(Normalizer::normalize($input,Normalizer::FORM_C)),
json_编码(Normalizer::normalize($input,Normalizer::FORM_D))
);
输出:
string(14) ""r\u00f6r.m4a""
string(15) ""ro\u0308r.m4a""
除了简单地比较文件名之外,您还应该特别注意使用哪个文件系统的规范化格式。例如:ext4不在乎,它会创建两个文件名看起来完全相同的文件,而FS-Mac使用的任何文件都只会使用分解的格式,并以静默方式转换合成的字符。我做了一个快速测试,它对我来说工作正常。每当我遇到不在ASCII集中的字符的问题时,我会立即转到字节,查看其中的实际内容,不要相信你的眼睛或调试器告诉你的内容。试着运行
echo bin2hex($\u FILES['upload']['name'][0])
并将其与echo bin2hex('rör.m4a')
进行比较,看看您的机器会告诉您什么。谢谢:)对于$\u FILES['upload']['name'][0]
和rör.m4a
,我会得到不同的十六进制输出。即使页面上只有上面的代码,你能用这些值编辑上面的文章吗?
string(14) ""r\u00f6r.m4a""
string(15) ""ro\u0308r.m4a""