22.08.2015, 15:28
|
Кандидат Javascript-наук
|
|
Регистрация: 17.04.2015
Сообщений: 125
|
|
Преобразовать строку в HTML код (обратное htmlspecialchars из php)
В переменной текст. В этом тексте ВСЕ спецсимволы из HTML заменены таким образом:
'<' = <
'>' = >
и другие символы заменены на свои "соответствия" в том числе.
Из-за этого весь HTML код превращается в текст в то время, когда он должен быть HTML кодом.
Можно ли как-то javascript'ом преобразовать HTML сущности в спецсимволы. (операция обратная php htmlspecialchars)
Вот такой текст в переменной:
<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 со своими тегами, а не сущностями вместо тегов.
|
|
22.08.2015, 15:41
|
|
Профессор
|
|
Регистрация: 22.05.2015
Сообщений: 384
|
|
можно попробовать это - http://phpjs.org/functions/htmlspecialchars_decode/
function htmlspecialchars_decode(string, quote_style) {
var optTemp = 0,
i = 0,
noquotes = false;
if (typeof quote_style === 'undefined') {
quote_style = 2;
}
string = string.toString()
.replace(/</g, '<')
.replace(/>/g, '>');
var OPTS = {
'ENT_NOQUOTES': 0,
'ENT_HTML_QUOTE_SINGLE': 1,
'ENT_HTML_QUOTE_DOUBLE': 2,
'ENT_COMPAT': 2,
'ENT_QUOTES': 3,
'ENT_IGNORE': 4
};
if (quote_style === 0) {
noquotes = true;
}
if (typeof quote_style !== 'number') { // Allow for a single string or an array of string flags
quote_style = [].concat(quote_style);
for (i = 0; i < quote_style.length; i++) {
// Resolve string input to bitwise e.g. 'PATHINFO_EXTENSION' becomes 4
if (OPTS[quote_style[i]] === 0) {
noquotes = true;
} else if (OPTS[quote_style[i]]) {
optTemp = optTemp | OPTS[quote_style[i]];
}
}
quote_style = optTemp;
}
if (quote_style & OPTS.ENT_HTML_QUOTE_SINGLE) {
string = string.replace(/�*39;/g, "'"); // PHP doesn't currently escape if more than one 0, but it should
// string = string.replace(/'|�*27;/g, "'"); // This would also be useful here, but not a part of PHP
}
if (!noquotes) {
string = string.replace(/"/g, '"');
}
// Put this in last place to avoid escape being double-decoded
string = string.replace(/&/g, '&');
return string;
}
Последний раз редактировалось KosBeg, 22.08.2015 в 15:45.
|
|
22.08.2015, 15:42
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
А зачем тогда преобразуется при выводе?
|
|
22.08.2015, 16:14
|
Кандидат Javascript-наук
|
|
Регистрация: 17.04.2015
Сообщений: 125
|
|
Сообщение от laimas
|
А зачем тогда преобразуется при выводе?
|
Это мне вопрос?
|
|
22.08.2015, 16:25
|
|
Профессор
|
|
Регистрация: 22.05.2015
Сообщений: 384
|
|
Сообщение от daslex
|
Это мне вопрос?
|
наверное к вам)
|
|
22.08.2015, 16:25
|
Кандидат Javascript-наук
|
|
Регистрация: 17.04.2015
Сообщений: 125
|
|
Сообщение от KosBeg
|
quote_style
|
Это что за параметр?
Этот пример я попозже попробую.
|
|
22.08.2015, 16:31
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от daslex
|
Это мне вопрос?
|
Ну а кому же еще. Зачем сервер преобразует, если на клиенте приходится делать обратное?
|
|
22.08.2015, 16:34
|
Кандидат Javascript-наук
|
|
Регистрация: 17.04.2015
Сообщений: 125
|
|
С помощью php я беру текст из файла. Этот текст - это HTML код, в котором описан некоторый язык программирования (в моем случае c++)/ там маленький пример. Этот HTML код должен стать HTML страницей. Проще говоря, средствами javascript я открываю новое окно, в которое вписываю этот HTML код, который с помощью php беру из файла.
Если HTML не преобразовывать в php, то часть исходного HTML затрется, а это уже приведет к тому, что в переменной javascript окажется непонятно что. Чтобы javascript проглотил этот текст, приходится экранировать символы и HTML превращать в HTML сущности, но из-за этого в открываемом окне страница выглядит не как HTML страница, а как текст.
Я могу дать исходный HTML код. Если он нужен.
И еще у меня такая проблема, что даже если вышеприведенный код мне поможет, он убьет часть кода, где > и некоторые символы изначально являются не HTML кодом, а HTML сущностями. (я об этом забыл вначале написать).
|
|
22.08.2015, 16:36
|
Кандидат Javascript-наук
|
|
Регистрация: 17.04.2015
Сообщений: 125
|
|
В смысле исходный - это тот, который сначала редактируется, чтобы в переменную javascript попало, что надо. А потом обратная операция нужна, насколько я понял.
|
|
22.08.2015, 16:40
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от daslex
|
Если HTML не преобразовывать в php, то часть исходного HTML затрется,
|
Это значит не удачно описывается - описание, это описание, а если что-то должно исполняться, то это уже исполняемый пример в описании.
|
|
|
|