响应文件管理器v9上传阿拉伯文件的名称问题

时间:2017-12-21 10:48:53

标签: php responsive-filemanager

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

我选择测试的图像名称是“vvv”,“اختبار”,“اختبار - Copy”所有这些都是'jpg',我上传文件后,他们给出了阿拉伯语名称,结果如下: / p>

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

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

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

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

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中的编码,但没有任何效果。

有没有人有任何想法解决这个问题?

2 个答案:

答案 0 :(得分:0)

你之所以得到&#34; ??????和?????&#34;是因为您必须更改数据库的集合集,这可能是UTF8常规CI,而不是保存文件名(没有iconv())并使用--without <modulename>

答案 1 :(得分:0)

你不想惹恼UploadHandler.php。上传的所有预处理都在upload.php进行,包括在fix_filename中的函数utils.php中按摩文件名。当它到达UploadHandler时,文件名已被修改,因此iconv和朋友将无法工作。看一下fix_filename并尝试在那里操作字符串:

/**
* 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);
}