1

我现在使用Responsive file manager v9作为 tinymce 的插件,tinymce的版本是 4.7.4,PHP 版本是 5.5。我试图解决上传的阿拉伯文件名称问题的问题,RFM 不会上传名称为阿拉伯文且名称正确的文件。

我选择测试的图像名称是“vvv”、“اختبار”、“اختبار - Copy”,在我上传具有阿拉伯名称的文件后,它们都是“jpg”,它们给出的结果如下:

اختبار.jpg ===> ط§ط®طھط¨ط§ط±.jpg

اختبار - Copy.jpg ==> ط§ط®طھط¨ط§ط± - Copy.jpg

但是,config.php 中的 mb_internal_encoding 函数是 UTF-8。

我尝试通过在 UploadHandler.php 第 1097 行中将 utf-8 转换为 cp1256 来使用iconv ,如下所示:

move_uploaded_file($uploaded_file, iconv("utf-8", "cp1256",$file_path));

代替

move_uploaded_file($uploaded_file, $file_path);

它允许上传带有阿拉伯名称的文件,但它们出现在 RFM 浏览器中并带有 ?????? 和 ?????- 在浏览器中复制并且没有拇指图像,但是拇指文件夹中有图像并且图像 اختبار.jpg 没有正确上传并使其变坏。只有英文文件的名称可以正常工作。

我在所有 php 文件中工作,我使用了base64_encode,我尝试更改 config.php 中的编码,但没有任何效果。

有谁知道解决这个问题?

4

2 回答 2

0

你不想惹麻烦UploadHandler.php。上传的所有预处理都发生在 中,包括在函数中upload.php按摩文件名。当它到达时,文件名已经被修改,所以朋友们将无法使用。查看 fix_filename 并尝试在那里操作字符串:fix_filenameutils.phpUploadHandlericonv

/**
* Cleanup filename
*
* @param  string  $str
* @param  bool    $transliteration
* @param  bool    $convert_spaces
* @param  string  $replace_with
* @param  bool    $is_folder
*
* @return string
*/
function fix_filename($str, $config, $is_folder = false)
{
    if ($config['convert_spaces'])
    {
        $str = str_replace(' ', $config['replace_with'], $str);
    }

    if ($config['transliteration'])
    {
        if (!mb_detect_encoding($str, 'UTF-8', true))
        {
            $str = utf8_encode($str);
        }
        if (function_exists('transliterator_transliterate'))
        {
            $str = transliterator_transliterate('Any-Latin; Latin-ASCII', $str);
        }
        else
        {
            $str = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $str);
        }

        $str = preg_replace("/[^a-zA-Z0-9\.\[\]_| -]/", '', $str);
    }

    $str = str_replace(array( '"', "'", "/", "\\" ), "", $str);
    $str = strip_tags($str);

    // Empty or incorrectly transliterated filename.
    // Here is a point: a good file UNKNOWN_LANGUAGE.jpg could become .jpg in previous code.
    // So we add that default 'file' name to fix that issue.
    if (strpos($str, '.') === 0 && $is_folder === false)
    {
        $str = 'file' . $str;
    }

    return trim($str);
}
于 2018-02-12T16:33:52.523 回答
0

你得到“??????和??????”的原因 是因为您还必须更改数据库的集合集,这可能是 UTF8 General CI,而不是保存文件名(不带iconv())并使用 file_name 移动文件iconv()

于 2018-02-12T14:59:50.350 回答