2012-06-01 4 views
0

Позволяет сказать, что в моем Flash-проекте у меня есть скрипт, который динамически создает для меня xml-файлы (по PHP). Имя файла XML основано на определенной переменной и экранировано с использованием escape(variable) в том случае, если эта переменная может (и в большинстве случаев) содержать неподдерживаемые символы имен файлов ...PHP - DOMDocument загружает XML с зашифрованным именем

Мне нужно знать точное имя xml-файла позже в моем Flash-проекте, потому что я Загружайте эти файлы XML только в том случае, если unescape(XMLfile) == variable. Там очень много переменных, так что я не могу просто использовать String.replace() функции, чтобы стереть unsuported fileneme символов ...

Там часть PHP файла Я использую:

$XMLDom = new DomDocument('1.0', 'UTF-8'); 
$xmlId = trim($_POST['xmlId']); 
if(file_exists($xmlId)){ 
    $XMLDom ->load($xmlId); 
}else{ 
    $newXMLHandler = fopen($xmlId, 'w') or die("can't open file"); 
    fclose($newXMLHandler); 

    $XMLDom ->load($xmlId); 

    .... rest of the code .... 

    $XMLDom ->save($xmlId); 
} 

Результат коды выше, что в каталоге 2 вновь созданные XML файлы

Один XML пустые, созданные fopen($xmlId, 'w'), названные: "ц% 20le% 2C% 2E% 40.xml" и второй один с именем: "фи ле, . @. xml ", где все мои новые X Данные ML хранятся ...

Есть ли способ загрузить экранированный XML-файл с помощью PHP?

Заранее благодарен.

Arthur.

ответ

1

Я не уверен в себе. Я понимаю вашу проблему, но если бы ваш вопрос заключался в том, чтобы найти аналоговую функцию escape() в PHP, то urlencode() выглядит как наилучшее совпадение, но вам нужно исследовать, что именно происходит убежали. Обратите внимание, например, что существует несколько различных способов для строк с процентным кодированием, особенно многобайтовых строк. Flash может использовать escapeMultibyte() или он также может использовать encodeURIComponent() как кодировать разные подмножества символов, так и по-другому - так что будьте осторожны!

Теперь, в отношении имен файлов, если ваш HTTP-сервер работает в системе Unix, чем «файл,. @. Xml» является допустимым именем файла, о чем не о чем беспокоиться - неудобно несколько раз, но оно является законным имя.

touch 'fi le,[email protected]' 

будет создавать файл, без проблем. В основном, ограниченные символы - это косые черты и нулевой символ («\ x00»), но обычно ограничивать также символы, которые могут интерпретироваться как команды оболочки - это действительно зависит от вас.

+0

Проблема заключается в том, что XML не будет загружаться из экранированного (или urlencoded) имени файла. DomDocument всегда отменяет имя, которое я запрашиваю, и пытаюсь загрузить '** file,. @. Xml **' вместо '** fi% 20le% 2C% 2E% 40.xml **'. Эти имена, например, относятся только к файлу: '**/z \\ *' c. "L.xml ** '? Невозможно даже сохранить его. Мне нужна замена строки для моей переменной, которая полностью разрешен как имя файла, может быть загружен как xml и декодирован в исходную переменную. –

+0

Да, он работает хорошо с fopen(). Спасибо за предложение. Я не могу использовать какой-либо увеличивающий счетчик, потому что все xml создаются на основе пользовательского ввода ;) –

Смежные вопросы