我现在使用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中的编码,但没有任何效果。
有没有人有任何想法解决这个问题?
答案 0 :(得分:0)
你之所以得到" ??????和?????"是因为您必须更改数据库的集合集,这可能是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);
}