gpt4 book ai didi

php - 如何在 PHP 中编码多字节文件名并在 javascript 中解码它们?

转载 作者:可可西里 更新时间:2023-10-31 22:52:01 25 4
gpt4 key购买 nike

这里是一些文件名的例子:

漢語.jpg (Chinese)
Федерация.jpg (Russian)
AbÇöişÜĞ.jpg (Turkish, ISO-8859-9)
...

我试过 rawurlencode(mb_convert_encoding($file, "UTF-8", mb_detect_encoding($file))) 但这不起作用,所有中文和俄文字符都打印为 %3F(regular问号)并删除所有土耳其语字符。

我正在 Windows、PHP 5.3 上进行测试。

我找到的唯一解决方案是明确输入编码:rawurlencode(mb_convert_encoding($file, "UTF-8", "ISO-8859-9")) 这仅适用于土耳其语字符。

顺便说一句,mb_detect_encoding($file) 总是为上述文件返回“UTF-8”。

编辑:
运行以下代码后,我认为 mb_convert_encoding() 无法解决我的问题:

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("mp", FilesystemIterator::UNIX_PATHS));
$iterator = new RegexIterator($iterator, '/^.+\.(gif|jpg|jpeg|png)$/i', RegexIterator::GET_MATCH);

foreach ($iterator as $file)
{
foreach (mb_list_encodings() as $encoding)
var_dump(rawurlencode(mb_convert_encoding($file[0], "UTF-8", $encoding)) . " : " . $encoding);
}

我想这是关于编码的事情,但我不知道该怎么做。

最佳答案

因此,最主要的是大多数传输(网络、文件、rpc)最多需要一个字节的字符。 URL 编码 (%FF) 要求输入数据也是每个字符一个字节。

所以你需要做的是使用 UTF8。它将采用多字节字符并从中生成一个 1 字节字符的字符串。从这个字符串,您可以做通常 ascii 可以做的事情。

你想要做的是为 php 显式设置编码:

mb_internal_encoding("UTF-8");

现在您所有的内部字符串和文件名等都将采用 UTF-8(单字节)编码。从这里您可以按原样回显文件名,它将作为编码数据传输。从 javascript,你所要做的就是使用 AJAX 发送请求,它会自动为你解码,准备好在浏览器中使用:)只要确保你在你的 html 文件中设置你的内容类型,就像这样将用作您的默认 JS 编码。

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />

关于php - 如何在 PHP 中编码多字节文件名并在 javascript 中解码它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10031064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com