[英]special characters UTF-8 with folders
我有这个来自jQuery File Tree PHP Connector的php代码
此jQuery文件树更新dir中的所有文件,并可以查看其中的所有内容
jQueryFileTree的链接在这里
这段代码中的好消息是使用带有UTF-8特殊字符的文件,但坏消息是它不使用带有特殊字符的文件夹。
当我单击普通文件夹时,文件中包含特殊字符=工作并且我可以看到所有文件
当我单击文件夹时,文件中包含特殊字符=不起作用,并且看不到任何文件
<?php
//
// jQuery File Tree PHP Connector
//
// Version 1.01
//
// Cory S.N. LaViska
// A Beautiful Site (http://abeautifulsite.net/)
// 24 March 2008
//
// History:
//
// 1.01 - updated to work with foreign characters in directory/file names (12 April 2008)
// 1.00 - released (24 March 2008)
//
// Output a list of files for jQuery File Tree
//
$_POST['dir'] = rawurldecode((isset($_POST['dir']) ? $_POST['dir'] : null ));
if( file_exists($_POST['dir']) ) {
$files = scandir($_POST['dir']);
natcasesort($files);
if( count($files) > 2 ) { /* The 2 accounts for . and .. */
echo "<ul class=\"jqueryFileTree\" style=\"display: none;\">";
foreach( $files as $file ) {
$Path = $_POST['dir'] . $file;
if(!file_exists($Path) || $file == '.' || $file == '..') {
continue;
}
//The following lines will take care of character encoding of special characters on a windows server.
//Since special characters (é for example) are not displayed correctly when a file containing this character is found on a windows server.
//The windows-1252 encoding returned by scandir() does not display correctly in HTML, so we need to convert it to UTF-8
//See http://stackoverflow.com/questions/22660797/ for full details
//WARNING: If you have a script running (instead of directly linking to files) to send your scripts, you have to run a reverse encoding conversion over the string passed by jQueryFileTree
//Use the following line to revert the encoding conversion:
// $FilePath = iconv(mb_detect_encoding($FilePath),"WINDOWS-1252",$FilePath);
$file = iconv(mb_detect_encoding($file,array("WINDOWS-1252","UTF-8"),true),'UTF-8',$file);
$Dir = iconv(mb_detect_encoding($_POST['dir'],array("WINDOWS-1252","UTF-8"),true),'UTF-8',$_POST['dir']);
$RelString = htmlentities($Dir.$file);
if(is_dir($Path)) {
//Handle directories
echo "<li class=\"directory collapsed\"><a href=\"javascript:void(0);\" rel=\"{$RelString}/\">" . htmlentities($file) . "</a></li>";
}
else {
//Handle files
$ext = preg_replace('/^.*\./', '', $file);
echo "<li class=\"file ext_$ext\"><a href=\"javascript:void(0);\" rel=\"{$RelString}\">" . htmlentities($file) . "</a></li>";
}
}
echo "</ul>";
}
}
?>
我发现的工作在于使用base64编码完整路径
因此,rel =应该包含base64_encode($ Dir。$ File)
当然在服务器端,您必须执行base64_decode
这样,任何字符编码都不会出现问题
尽管必须在jqueryFileTree.js文件中更改第72行
showTree( $(this).parent(), escape($(this).attr('rel').match( /.*\// )) );
变成
showTree( $(this).parent(), $(this).attr('rel') );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.