почему file_get_contents не работает с HTML-файлами?

0

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

<?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
    Оставляя только + в setValue , это не должно работать с чем-либо, что больше, чем одна строка, так как JavaScript запрещает многострочные строки. Он определенно потерпит неудачу с чем-либо с кавычками, так как он сформирует недопустимый JavaScript. Используйте editor.setValue(<?php echo json_encode($content); ?>"); Чтобы правильно создать строку, которую вы можете передать в JavaScript.
  • 0
    @ Амадан Это работает. Спасибо за объяснение и решение.
Показать ещё 1 комментарий
Теги:

1 ответ

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 должен будет сделать некоторое декодирование, для которого он не разработан (тогда вам необходимо написать алгоритм декодирования).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню