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