基本都能看懂吧?$dir = isset($_REQUEST['lib'])&&$_REQUEST['lib'] == 'yui' ? '../../../' : '../../';//这个你可以注释掉了,这个可以用来取当前WEB路径的
$dir = "C:\\";//这里就是你遍历的硬盘上的绝对路径,当然只能是对本机有效
$node = isset($_REQUEST['node'])?$_REQUEST['node']:"";//看到这个NODE应该只到是节点的意思了吧
if(strpos($node, '..') !== false){
die('Nice try buddy.');
}
$nodes = array();//这里定义一个数组,这个数组用来存放遍历的目录以及文件
$d = dir($dir.$node);//取节点
while($f = $d->read()){//循环读节点,下面就是那些就是读节点判断是目录还是文件,并去目录或文件的一些相关信息
if($f == '.' || $f == '..' || substr($f, 0, 1) == '.')continue;
$lastmod = date('M j, Y, g:i a',filemtime($dir.$node.'/'.$f));
if(is_dir($dir.$node.'/'.$f)){
$qtip = 'Type: Folder<br />Last Modified: '.$lastmod;
$nodes[] = array('text'=>$f, 'id'=>$node.'/'.$f/*, 'qtip'=>$qtip*/, 'cls'=>'folder');
}else{
$size = formatBytes(filesize($dir.$node.'/'.$f), 2);
$qtip = 'Type: JavaScript File<br />Last Modified: '.$lastmod.'<br />Size: '.$size;
$nodes[] = array('text'=>$f, 'id'=>$node.'/'.$f, 'leaf'=>true/*, 'qtip'=>$qtip, 'qtipTitle'=>$f */, 'cls'=>'file');
}
}
$d->close();
$dir = "C:\\";//这里就是你遍历的硬盘上的绝对路径,当然只能是对本机有效
$node = isset($_REQUEST['node'])?$_REQUEST['node']:"";//看到这个NODE应该只到是节点的意思了吧
if(strpos($node, '..') !== false){
die('Nice try buddy.');
}
$nodes = array();//这里定义一个数组,这个数组用来存放遍历的目录以及文件
$d = dir($dir.$node);//取节点
while($f = $d->read()){//循环读节点,下面就是那些就是读节点判断是目录还是文件,并去目录或文件的一些相关信息
if($f == '.' || $f == '..' || substr($f, 0, 1) == '.')continue;
$lastmod = date('M j, Y, g:i a',filemtime($dir.$node.'/'.$f));
if(is_dir($dir.$node.'/'.$f)){
$qtip = 'Type: Folder<br />Last Modified: '.$lastmod;
$nodes[] = array('text'=>$f, 'id'=>$node.'/'.$f/*, 'qtip'=>$qtip*/, 'cls'=>'folder');
}else{
$size = formatBytes(filesize($dir.$node.'/'.$f), 2);
$qtip = 'Type: JavaScript File<br />Last Modified: '.$lastmod.'<br />Size: '.$size;
$nodes[] = array('text'=>$f, 'id'=>$node.'/'.$f, 'leaf'=>true/*, 'qtip'=>$qtip, 'qtipTitle'=>$f */, 'cls'=>'file');
}
}
$d->close();
$si = array("", "K", "M", "G", "T", "P", "E", "Z", "Y");
$iec = array("", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi", "Yi");
switch(strtoupper($mode)) {
case "SI" : $factor = 1000; $symbols = $si; break;
case "IEC" : $factor = 1024; $symbols = $iec; break;
default : $factor = 1000; $symbols = $si; break;
}
switch($bB) {
case "b" : $val *= 8; break;
default : $bB = "B"; break;
}
for($i=0;$i<count($symbols)-1 && $val>=$factor;$i++)
$val /= $factor;
$p = strpos($val, ".");
if($p !== false && $p > $digits) $val = round($val);
elseif($p !== false) $val = round($val, $digits-$p);
return round($val, $digits) . " " . $symbols[$i] . $bB;
}
是这部分不懂啊,大侠
测了一下,PHP读中文目录是没问题的
但你用ext ,那是js的问题,你传值时会有字符编码问题,
这个编码统一就行了!或者进行一下转码!
header("Content-Type: text/html; charset=utf-8");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");function __jsonText($array)
{
$str = "{";
foreach($array as $key=> $value)
{
$value = str_replace("\"", "\\\"", $value);
if($str != "{") $str.=",";
$str .= "$key: " . "\"$value\"";
}
$str .= "}";
return $str;
}
$strNode = "";foreach($nodes as $key=>$value)
{
$strNode .= __jsonText($value) . ",";
}
$strNode = sprintf('[%s]', iconv('gb2312', 'utf-8', rtrim($strNode, ',')));
echo $strNode;替换
$json = new Services_JSON();
echo $json->encode($nodes);
这两句.reorder.html
改了
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">但ext没有对中文编码,所以很郁闷,呵呵.能显示,但还是不能处理.
是这个函数在做转换的时候出了问题!
* convert a string from one UTF-16 char to one UTF-8 char
*
* Normally should be handled by mb_convert_encoding, but
* provides a slower PHP-only method for installations
* that lack the multibye string extension.
*
* @param string $utf16 UTF-16 character
* @return string UTF-8 character
* @access private
*/
英文看不是太懂
闷
get-nodes.php
直接看这个文件的时候还没任何问题
应该是ext 对中文处理不好
ext对中文的URL地址没有编码,导致不能显示中文目录下面的文件和目录!
$node = iconv('utf-8', 'gb2312', $node);
$nodes = array();
$d = dir($dir.$node);
while($f = $d->read()){
if($f == '.' || $f == '..' || substr($f, 0, 1) == '.')continue;
$lastmod = date('M j, Y, g:i a',filemtime($dir.$node.'/'.$f));
if(is_dir($dir.$node.'/'.$f)){
$qtip = 'Type: Folder<br />Last Modified: '.$lastmod;
$nodes[] = array('text'=>$f, 'id'=>$node.'/'.$f/*, 'qtip'=>$qtip*/, 'cls'=>'folder');
}else{
$size = formatBytes(filesize($dir.$node.'/'.$f), 2);
$qtip = 'Type: JavaScript File<br />Last Modified: '.$lastmod.'<br />Size: '.$size;
$nodes[] = array('text'=>$f, 'id'=>$node.'/'.$f, 'leaf'=>true/*, 'qtip'=>$qtip, 'qtipTitle'=>$f */, 'cls'=>'file');
}
}
$d->close();header("Content-Type: text/html; charset=utf-8");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");function __jsonText($array)
{
$str = "{";
foreach($array as $key=> $value)
{
$value = str_replace("\"", "\\\"", $value);
if($str != "{") $str.=",";
$str .= "$key: " . "\"$value\"";
}
$str .= "}";
return $str;
}
$strNode = "";foreach($nodes as $key=>$value)
{
$strNode .= __jsonText($value) . ",";
}
$strNode = sprintf('[%s]', iconv('gb2312', 'utf-8', rtrim($strNode, ',')));
echo $strNode;搞定,结帖吧,呵呵.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Reorder TreePanel</title>
<link rel="stylesheet" type="text/css" href="css-ext-all.css" /> <!-- GC -->
<!-- LIBS -->
<script type="text/javascript" src="ext-base.js"></script>
<!-- ENDLIBS --> <script type="text/javascript" src="ext-all.js"></script>
<script type="text/javascript" src="reorder.js"></script><!-- Common Styles for the examples -->
<link rel="stylesheet" type="text/css" href="examples.css" />
</head>
<body>
<script type="text/javascript" src="examples.js"></script><!-- EXAMPLES -->
<p>The js is not minified so it is readable. See <a href="reorder.js">reorder.js</a>.</p><div id="tree-div" style="overflow:auto; height:300px;width:250px;border:1px solid #c3daf9;"></div></body>
</html>
<?php
// from php manual page
function formatBytes($val, $digits = 3, $mode = "SI", $bB = "B"){ //$mode == "SI"|"IEC", $bB == "b"|"B"
$si = array("", "K", "M", "G", "T", "P", "E", "Z", "Y");
$iec = array("", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi", "Yi");
switch(strtoupper($mode)) {
case "SI" : $factor = 1000; $symbols = $si; break;
case "IEC" : $factor = 1024; $symbols = $iec; break;
default : $factor = 1000; $symbols = $si; break;
}
switch($bB) {
case "b" : $val *= 8; break;
default : $bB = "B"; break;
}
for($i=0;$i<count($symbols)-1 && $val>=$factor;$i++)
$val /= $factor;
$p = strpos($val, ".");
if($p !== false && $p > $digits) $val = round($val);
elseif($p !== false) $val = round($val, $digits-$p);
return round($val, $digits) . " " . $symbols[$i] . $bB;
}$dir = isset($_REQUEST['lib'])&&$_REQUEST['lib'] == 'yui' ? '../../../' : '../../';
$dir = "D:\\";
$node = isset($_REQUEST['node'])?$_REQUEST['node']:"";
if(strpos($node, '..') !== false){
die('Nice try buddy.');
}
$node = iconv('utf-8', 'gb2312', $node);
$nodes = array();
$d = dir($dir.$node);
while($f = $d->read()){
if($f == '.' || $f == '..' || substr($f, 0, 1) == '.')continue;
$lastmod = date('M j, Y, g:i a',filemtime($dir.$node.'/'.$f));
if(is_dir($dir.$node.'/'.$f)){
$qtip = 'Type: Folder<br />Last Modified: '.$lastmod;
$nodes[] = array('text'=>$f, 'id'=>$node.'/'.$f/*, 'qtip'=>$qtip*/, 'cls'=>'folder');
}else{
$size = formatBytes(filesize($dir.$node.'/'.$f), 2);
$qtip = 'Type: JavaScript File<br />Last Modified: '.$lastmod.'<br />Size: '.$size;
$nodes[] = array('text'=>$f, 'id'=>$node.'/'.$f, 'leaf'=>true/*, 'qtip'=>$qtip, 'qtipTitle'=>$f */, 'cls'=>'file');
}
}
$d->close();header("Content-Type: text/html; charset=utf-8");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");function __jsonText($array)
{
$str = "{";
foreach($array as $key=> $value)
{
$value = str_replace("\"", "\\\"", $value);
if($str != "{") $str.=",";
$str .= "$key: " . "\"$value\"";
}
$str .= "}";
return $str;
}
$strNode = "";foreach($nodes as $key=>$value)
{
$strNode .= __jsonText($value) . ",";
}
$strNode = sprintf('[%s]', iconv('gb2312', 'utf-8', rtrim($strNode, ',')));
echo $strNode;
/*
$json = new Services_JSON();
echo $json->encode($nodes);
*/
?>
本地测试成功,不知道你哪是啥情况.完全是下载你的包以后修改的.
为什么经过function __jsonText($array)
{
$str = "{";
foreach($array as $key=> $value)
{
$value = str_replace("\"", "\\\"", $value);
if($str != "{") $str.=",";
$str .= "$key: " . "\"$value\"";
}
$str .= "}";
return $str;
}
$strNode = "";foreach($nodes as $key=>$value)
{
$strNode .= __jsonText($value) . ",";
}
$strNode = sprintf('[%s]', iconv('gb2312', 'utf-8', rtrim($strNode, ',')));
echo $strNode;
转换,值就变为空了呢?没查出原因,继续求教!
while($f = $d->read()){
if($f == '.' || $f == '..' || substr($f, 0, 1) == '.')continue;
$lastmod = date('M j, Y, g:i a',filemtime($dir.$node.'/'.$f));
if(is_dir($dir.$node.'/'.$f)){
$qtip = 'Type: Folder<br />Last Modified: '.$lastmod;
$nodes[] = array('checked'=>false, 'text'=>$f, 'id'=>$node.'/'.$f/*, 'qtip'=>$qtip*/, 'cls'=>'folder');
}else{
$size = formatBytes(filesize($dir.$node.'/'.$f), 2);
$qtip = 'Type: JavaScript File<br />Last Modified: '.$lastmod.'<br />Size: '.$size;
$nodes[] = array('checked'=>false, 'text'=>$f, 'id'=>$node.'/'.$f, 'leaf'=>true/*, 'qtip'=>$qtip, 'qtipTitle'=>$f */, 'cls'=>'file');
}
}不知道你哪出了啥问题,我这块没有出现你所说的情况.
http://www.myext.cn/Article/839.html,公司不能截图,所以表达的困难...
// from php manual page
function formatBytes($val, $digits = 3, $mode = "SI", $bB = "B"){ //$mode == "SI"|"IEC", $bB == "b"|"B"
$si = array("", "K", "M", "G", "T", "P", "E", "Z", "Y");
$iec = array("", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi", "Yi");
switch(strtoupper($mode)) {
case "SI" : $factor = 1000; $symbols = $si; break;
case "IEC" : $factor = 1024; $symbols = $iec; break;
default : $factor = 1000; $symbols = $si; break;
}
switch($bB) {
case "b" : $val *= 8; break;
default : $bB = "B"; break;
}
for($i=0;$i<count($symbols)-1 && $val>=$factor;$i++)
$val /= $factor;
$p = strpos($val, ".");
if($p !== false && $p > $digits) $val = round($val);
elseif($p !== false) $val = round($val, $digits-$p);
return round($val, $digits) . " " . $symbols[$i] . $bB;
}$dir = isset($_REQUEST['lib'])&&$_REQUEST['lib'] == 'yui' ? '../../../' : '../../';
$dir = "D:\\";
$node = isset($_REQUEST['node'])?$_REQUEST['node']:"";
if(strpos($node, '..') !== false){
die('Nice try buddy.');
}
$node = iconv('utf-8', 'gb2312', $node);
$nodes = array();
$d = dir($dir.$node);
$flag=false;
while($f = $d->read()){
if($f == '.' || $f == '..' || substr($f, 0, 1) == '.')continue;
$lastmod = date('M j, Y, g:i a',filemtime($dir.$node.'/'.$f));
if(is_dir($dir.$node.'/'.$f)){
$qtip = 'Type: Folder<br />Last Modified: '.$lastmod;
$nodes[] = array('checked'=>$flag,'text'=>$f, 'id'=>$node.'/'.$f/*, 'qtip'=>$qtip*/, 'cls'=>'folder');
}else{
$size = formatBytes(filesize($dir.$node.'/'.$f), 2);
$qtip = 'Type: JavaScript File<br />Last Modified: '.$lastmod.'<br />Size: '.$size;
$nodes[] = array('checked'=>$flag,'text'=>$f, 'id'=>$node.'/'.$f, 'leaf'=>true/*, 'qtip'=>$qtip, 'qtipTitle'=>$f */, 'cls'=>'file');
}
}
$d->close();header("Content-Type: text/html; charset=utf-8");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");function jsonText($array)
{
$str = "{";
foreach($array as $key=> $value)
{ if($str != "{") $str.=",";
switch (gettype($value)) {
case 'boolean':
$value=$value ? 'true' : 'false';
$str .= "$key: " .$value;
break;
default:
$value = str_replace("\"", "\\\"", $value);
$str .= "$key: " ."\"$value\"";
break;
}
}
$str .= "}";
return $str;
}
$strNode = "";foreach($nodes as $key=>$value)
{
$strNode .= jsonText($value) . ",";
}
$strNode = sprintf('[%s]', iconv('gb2312', 'utf-8', rtrim($strNode, ',')));
echo $strNode;
?>
switch (gettype($value)) {
case 'boolean':
$value=$value ? 'true' : 'false';
$str .= "$key: " .$value;
break;
default:
$value = str_replace("\"", "\\\"", $value);
$str .= "$key: " ."\"$value\"";
break;
}这部分才是关键代码
case 'string':
// STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
/* $ascii = '';
$strlen_var = strlen($var); /*
* Iterate over every character in the string,
* escaping with a slash or encoding to UTF-8 where necessary
for ($c = 0; $c < $strlen_var; ++$c) { $ord_var_c = ord($var{$c}); switch (true) {
case $ord_var_c == 0x08:
$ascii .= '\b';
break;
case $ord_var_c == 0x09:
$ascii .= '\t';
break;
case $ord_var_c == 0x0A:
$ascii .= '\n';
break;
case $ord_var_c == 0x0C:
$ascii .= '\f';
break;
case $ord_var_c == 0x0D:
$ascii .= '\r';
break; case $ord_var_c == 0x22:
case $ord_var_c == 0x2F:
case $ord_var_c == 0x5C:
// double quote, slash, slosh
$ascii .= '\\'.$var{$c};
break; case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
// characters U-00000000 - U-0000007F (same as ASCII)
$ascii .= $var{$c};
break; case (($ord_var_c & 0xE0) == 0xC0):
// characters U-00000080 - U-000007FF, mask 110XXXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c, ord($var{$c + 1}));
$c += 1;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break; case (($ord_var_c & 0xF0) == 0xE0):
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}));
$c += 2;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break; case (($ord_var_c & 0xF8) == 0xF0):
// characters U-00010000 - U-001FFFFF, mask 11110XXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}),
ord($var{$c + 3}));
$c += 3;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break; case (($ord_var_c & 0xFC) == 0xF8):
// characters U-00200000 - U-03FFFFFF, mask 111110XX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}),
ord($var{$c + 3}),
ord($var{$c + 4}));
$c += 4;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break; case (($ord_var_c & 0xFE) == 0xFC):
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}),
ord($var{$c + 3}),
ord($var{$c + 4}),
ord($var{$c + 5}));
$c += 5;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
}
}
*/
return "\"$var\"";然后在get-nodes.php中:
把
echo $json->encode($nodes);
改为
$json =iconv('gb2312', 'utf-8', $json->encode($nodes));
echo $json呵呵就这么简单