22.08.2015, 16:41
|
Кандидат Javascript-наук
|
|
Регистрация: 17.04.2015
Сообщений: 125
|
|
Если непонятно. Я опишу задачу в более полной форме. Я сразу могу сказать, что javascript я совсем не знаю, поэтому я не могу оценить насколько трудна эта задача. Но решение для меня очень желательно.
Такое ощущение, что мы как в разных странах живем и через переводчик общаемся' )
|
|
22.08.2015, 16:57
|
Кандидат Javascript-наук
|
|
Регистрация: 17.04.2015
Сообщений: 125
|
|
Сообщение от laimas
|
Это значит не удачно описывается - описание, это описание, а если что-то должно исполняться, то это уже исполняемый пример в описании.
|
Я Вас вообще не понял.
Вот смотрите. Есть файл. В файле обычный HTML код. Вот он этот код.
<HTML><body>\n
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>\n
<meta http-equiv='content-type' content='text/html; charset=utf-8'>
<link href='http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>
<script src='http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/scripts/shCore.js' type='text/javascript'></script>
<script src='http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/scripts/shBrushCpp.js' type='text/javascript'></script>
<script language='javascript'>
SyntaxHighlighter.all();
</script>
<!----------------КОД----------------------------->
<pre class='brush: cpp'>
#include <iostream>
<br />
using namespace std;
int main(){
setlocale(LC_ALL,"");
int Height,Weight;
cout<<"Введите Ваш рост и вес:\n";
cin>>Height>>Weight;
cout<<"Ваш рост: "<<Height<<endl;
cout<<"Ваш вес: "<<Weight<<endl;
}
</pre>
<!----------------КОД----------------------------->
</body></HTML>
Файл с этим кодом хранится на сервере, следовательно, чтобы его получить, я использую php, а из php уже отдаю в javascript. Если я не экранирую символы и не преобразую HTML в HTML сущности, то этот код в итог ломается и уже когда выполняется javascript у меня нефига не работает. А если я преобразую, то я на выходе получаю вот такой HTML код
<HTML><body>\\n
<!DOCTYPE HTML PUBLIC \'-//W3C//DTD HTML 4.01 Transitional//EN\'>\\n
<meta http-equiv=\'content-type\' content=\'text/html; charset=utf-8\'>
<link href=\'http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/styles/shCore.css\' rel=\'stylesheet\' type=\'text/css\'/>
<link href=\'http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/styles/shThemeDefault.css\' rel=\'stylesheet\' type=\'text/css\'/>
<script src=\'http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/scripts/shCore.js\' type=\'text/javascript\'></script>
<script src=\'http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/scripts/shBrushCpp.js\' type=\'text/javascript\'></script>
<script language=\'javascript\'>
SyntaxHighlighter.all();
</script>
<!----------------КОД----------------------------->
<pre class=\'brush: cpp\'>
#include &lt;iostream&gt;
<br />
using namespace std;
int main(){
setlocale(LC_ALL,&quot;&quot;);
int Height,Weight;
cout&lt;&lt;&quot;Введите Ваш рост и вес:\\n&quot;;
cin&gt;&gt;Height&gt;&gt;Weight;
cout&lt;&lt;&quot;Ваш рост: &quot;&lt;&lt;Height&lt;&lt;endl;
cout&lt;&lt;&quot;Ваш вес: &quot;&lt;&lt;Weight&lt;&lt;endl;
}
</pre>
<!----------------КОД----------------------------->
</body></HTML>
На клиенте я открываю новое окно и вписываю этот код в это окно, но из-за предыдущих преобразований получается, что это текст в виде HTML кода, а мне нужно, чтобы это получилась страничка с исходным HTML кодом. (тот, что выше).При этом должна сработать подсветка кода.
|
|
22.08.2015, 16:59
|
Кандидат Javascript-наук
|
|
Регистрация: 17.04.2015
Сообщений: 125
|
|
В смысле, я при некотором действии пользователя открываю окно, в которое должен вписаться изначальный текст, взятый с файла, который хранится на сервере'
|
|
22.08.2015, 17:34
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
<HTML><body>
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
<meta http-equiv='content-type' content='text/html; charset=utf-8'>
......
Это html-код страницы. Зачем его преобразовывать?
using namespace std;
int main(){
setlocale(LC_ALL,"" ;
int Height,Weight;
cout<<"Введите Ваш рост и вес:\n";
cin>>Height>>Weight;
cout<<"Ваш вес: "<<Weight<<endl;
.....
Это описание кода и необходимое уже преобразовано в html-сущности. Зачем к этому раз применять ко всему содержимому htmlspecialchars?
|
|
22.08.2015, 17:44
|
Кандидат Javascript-наук
|
|
Регистрация: 17.04.2015
Сообщений: 125
|
|
Сообщение от laimas
|
<HTML><body>
Это описание кода и необходимое уже преобразовано в html-сущности. Зачем к этому раз применять ко всему содержимому htmlspecialchars?
|
Надо не применять еще раз, надо убрать те применения, которые были сделаны. Вернуть в то состояние как оно было.
То, что внутри комментариев <!--Код--> к HTML коду отношения не имеет. Это изначально HTML сущности, это изначально угловые скобки, кавычки и другие элементы текста, но это так только между комментариями <!--Код-->/ Хотя даже в нем есть элементы, которые преобразованы в HTML сущности... это плохо.
_________________
Применять затем, что без применения при вставке переменной php в переменную javascript, без подобной редактуры текста у меня ВСЁ, абсолютно ВСЁ не работает.
Последний раз редактировалось daslex, 22.08.2015 в 17:50.
|
|
22.08.2015, 18:04
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Вы понимаете назначение функции htmlspecialchars? Думаю что да.
Остается понять кто автор данных описаний - если вы, то неужели трудно определиться что должно на странице быть описанием, а что его представлять? Если не вы, то почему разрешается такой "винегрет", а не храниться описание отдельно, к которому только при выводе нужно применять htmlspecialchars?
|
|
22.08.2015, 18:08
|
Кандидат Javascript-наук
|
|
Регистрация: 17.04.2015
Сообщений: 125
|
|
Я знаю что она делает и зачем она нужна.
Терминология "описаний" мне непонятна.
Открытое на клиенте окно с вписанным в него текстом должно стать HTML страницей, той самой HTML страницей, которая хранится на сервере.
|
|
22.08.2015, 18:18
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Вставляйте в чем проблема? Зачем вы ее пропускаете через htmlspecialchars, ведь код описания уже преобразован?
|
|
22.08.2015, 18:20
|
Кандидат Javascript-наук
|
|
Регистрация: 17.04.2015
Сообщений: 125
|
|
Вот текст исходной страницы.
<?php
$arr[] = str_replace('</script>','</s" + "cript>',htmlspecialchars(addslashes(file_get_contents("MyFiles/MyFile.php"))));
?>
<script type='text/javascript' >
function MyFunc(S){
var NewWin=window.open('','','...');
NewWin.document.write(S);
}
</script>
<div id="id2" >
<b>Кликни меня</b><br />
<script type='text/javascript'>
document.getElementById("id2").onclick = MyFunc.bind(null,<?php echo json_encode($arr[0]); ?>);
</script>
</div>
С помощью php я записываю текст из файла в ячейку массива. Т.к. тупо записать без экранирования+htmlspecialchars у меня не вышло, мне подсказали использовать экранирование и htmlspecialchars.
Дальше при клике по элементу <div>, должно открыться окно, в которое должен вписаться текст из файла, вписаться он должен как HTML код. Если все правильно, то пользователь, кликнувший по <div>, должен получить открытое окно, которое будет чем-то типа зеркального отражения файла с сервера, даже не файла, а полноценной HTML странички. Т.е. это такая вот передача текстовых данных с сервера в открываемое окно у клиента.
Последний раз редактировалось daslex, 22.08.2015 в 18:24.
|
|
22.08.2015, 18:21
|
Кандидат Javascript-наук
|
|
Регистрация: 17.04.2015
Сообщений: 125
|
|
Проблема в том, что если не преобразовывать HTML код в HTML сущности, то при передаче текстовых данных в массив возникают непонятные мне проблемы. А если преобразовывать, то я получаю не отражение HTML страницы, а отражение ее кода.
|
|
|
|