2015-01-07 5 views
0

У меня есть страница editor.php, которая получает имя файла с другой страницы и загружает его в редактор codemirror. Моя проблема в том, что он работает только с .txt-файлами, но не работает с .html или .java-файлами.Почему файл_get_contents не работает с файлами html?

<?php 
    $login=$_COOKIE['login']; 
    $directory = "userFiles/" . $login . "/"; 
    $filename = isset($_POST['files']) ? $_POST['files'] : false; 
    $content = @file_get_contents($directory.$filename); 
?> 
<!DOCTYPE html> 
<html> 
<head> 
<title>Editor</title> 
<script src='codemirror/lib/codemirror.js'></script> 
<script src='codemirror/mode/css/css.js'></script> 
<script src='codemirror/mode/htmlmixed/htmlmixed.js'></script> 
<link rel='stylesheet' href='codemirror/lib/codemirror.css'> 
<style> 
.CodeMirror { 
    width: 100%; 
    height: 85%; 
} 
</style> 
</head> 
<body> 
<textarea id="code" name="code" autofocus></textarea> 
<button class="button" id="save">Save</button> 
<script> 
var editor = CodeMirror.fromTextArea(document.getElementById('code'), { 
    mode: 'text/html', 
    tabMode: 'indent', 
    lineNumbers: true, 
    lineWrapping: true, 
    autoCloseTags: true 
}); 
editor.setValue("<?php echo $content;?>"+); 
</script> 
</body> 
</html> 
+0

Оставив в покое '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Это обязательно провалится с чем-либо с цитатой в нем, так как это приведет к неправильному JavaScript. Используйте 'editor.setValue ("); 'Для правильного создания строки, которую вы можете передать JavaScript. – Amadan

+0

@Amadan Это работает. Спасибо за объяснение и решение. – zeee9

+2

Вы должны проверить запрашиваемый файл, иначе можно прочитать любой файл. – Gumbo

ответ

0

Наиболее вероятным объяснением является то, что такие файлы имеют много двойных кавычек ("). Теперь то, что происходит с

"<?php echo $content;?>" 

в самом деле: вы получаете строки, как "<a href="google.com">link</a>". JavaScript пытается интерпретировать их, но не может понять, что вдруг вы перестанете строку, в конце концов JavaScript видит:

"<a href="google.com">link</a>" 
^  ^^ 
|  | \-- something weird??! 
|  \--end string 
\--start string 

Я предлагаю вам взглянуть на сырой исходный код сгенерированной страницы, чтобы проверить это.

Решение?

Вы можете решить это, поскольку @Amadan предлагает, используя перевозчик, например, JSON. К json_encode вы кодируете строку в формате, JavaScript может отсутствовать. Вы также можете использовать другой формат (где вы избегаете кавычек), но в этом случае JavaScript должен будет сделать некоторое декодирование, для которого он не разработан (тогда вам необходимо написать алгоритм декодирования).

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