0

我有在 php 中获取文件列表的代码,但如果文件名包含 & 字符,它不会显示该文件。这是代码:

附言。我不是 php 程序员,我真的不知道这个错误是什么。所有帮助将不胜感激 提前非常感谢。

<?php
include_once('config.inc.php');
$current_dir = 'root';
if(array_key_exists('directory',$_POST)) {
$current_dir = $_POST['directory'];
}

// Creating a new XML using DOMDocument
 $file_list = new DOMDocument('1.0');
 $xml_root = $file_list->createElement('filelist');
 $xml_root = $file_list->appendChild($xml_root);

 // Setting the 'currentPath' attribute of the XML
 $current_path = $file_list->createAttribute('currentPath');
 $current_path->appendChild($file_list->createTextNode($current_dir));
 $xml_root->appendChild($current_path);

 // Replacing the word 'root' with the real root path
 $current_dir = substr_replace($current_dir, $root, 0, 4);

 $di = new DirectoryIterator($current_dir);

 // Creating the XML using DirectoryIterator
 while($di->valid())
 {
if(false == $di->isDot())
{
    if($di->isDir() && true != in_array($di->getBasename(),$h_folders))
    {
        $fl_node = $file_list->createElement('dir');
        $xml_root->appendChild($fl_node);
    }else if($di->isFile() && true !== in_array($di->getBasename(),$h_files) 
            &&  true !== in_array(get_ext($di->getBasename()),$h_types))
    {
        $fl_node = $file_list->createElement('file');
        $xml_root->appendChild($fl_node);
    }else 
    {
        $di->next();
            continue;
    }
    $name = $file_list->createElement('name',$di->getBasename());
    $fl_node->appendChild($name);
    $path = substr_replace($di->getRealPath(), 'root', 0, strlen($root));
    $path_node = $file_list->createElement('path', $path);
    $fl_node->appendChild($path_node);
    $di->next();
}else $di->next();
}

function get_ext($filename)
{
$exp = '/^(.+)\./';
return preg_replace($exp,'',$filename);
}

 // Returning the XML to Flash.
 echo $file_list->saveXML();
 ?>
4

2 回答 2

1

&字符在 HTML 中用于编写实体。

如果你想在 HTML 中显示任意文本,你需要通过调用htmlentities().

于 2013-07-15T19:24:34.087 回答
0

如果你提供一些我可以帮助的来源,文件内容不是文件名。示例如何获取文件列表:

$c = "/some/path/to/file/here";
if(is_dir($c)){
foreach(scandir($c) as $file){
  if($file != '.' && $file != '..'){
    $d = $c.DIRECTORY_SEPARATOR.$file;
    echo " \"". realpath($d)  ."\"\n";
    }
}
}
于 2013-07-15T19:31:48.267 回答