XML-从文件名输出字符省略号

时间:2011-09-19 11:54:11

标签: php xml

我喜欢用XML打印出特殊字符省略号“...”。如果是硬编码则可行。但是如果我从readdir()获得该字符。它不会起作用。为什么呢?

代码:

<?php

header('Content-Type: text/xml; charset=utf-8');

$maxnesting = 2;

echo "<root>";

initXMLDir("//somefolder");

function initXMLDir($target, $level = 0){
    global $maxnesting;

    $ignore = array("cgi-bin", ".", "..");

    if(is_dir($target) && $level < $maxnesting){
        if($dir = opendir($target)){
            while (($file = readdir($dir)) !== false){
                if(!in_array($file, $ignore)){
                    if(is_dir("$target/$file")){
                        echo "<object><name>".$file."</name>";
                        initXMLDir("$target/$file", ($level+1));
                        echo "</object>";
                    }
                    else{
                        echo "<object>".$file."</object>";
                    }
                }
            }
        }
        closedir($dir);
    }
}
echo "</root>";
?>

如果我像这样对其进行硬编码并从文件名中删除该字符,则可以正常工作。

echo "<object>…".$file."…</object>";

它输出的错误是。

An invalid character was found in text content.

修改-解决方法:

所以我的解决方案或解决方法来解决这个问题。通过结合这个功能,我找到了here

function xml_character_encode($string, $trans='') {
    $trans=(is_array($trans)) ? $trans : get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
    foreach ($trans as $k=>$v) $trans[$k]= "&#".ord($k).";";
    return strtr($string, $trans);
}

iconv(mb_detect_encoding($file, "auto"), 'UTF-8', $file);

我解决了我的问题。所以基本上我首先编码所有字符,导致iconv()出现问题所以我可以安全地使用它。

所以像这样使用它:

$file= xml_character_encode($file);
$file= iconv(mb_detect_encoding($file, "auto"), 'UTF-8', $file);

我试图手动替换字符省略号,因为它似乎是唯一一个无法正确显示utf8_encode()和htmlspecialchars()的特殊字符(如果省略号显示正确,我只需要2个函数)用strtr()无法以某种方式完成。

0 个答案:

没有答案