Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Преобразовать строку в HTML код (обратное htmlspecialchars из php) (https://javascript.ru/forum/misc/57836-preobrazovat-stroku-v-html-kod-obratnoe-htmlspecialchars-iz-php.html)

daslex 22.08.2015 15:28

Преобразовать строку в HTML код (обратное htmlspecialchars из php)
 
В переменной текст. В этом тексте ВСЕ спецсимволы из HTML заменены таким образом:
'<' = &lt;
'>' = &gt;
и другие символы заменены на свои "соответствия" в том числе.

Из-за этого весь HTML код превращается в текст в то время, когда он должен быть HTML кодом.

Можно ли как-то javascript'ом преобразовать HTML сущности в спецсимволы. (операция обратная php htmlspecialchars)

Вот такой текст в переменной:
&lt;HTML&gt;&lt;body&gt;\\n
   &lt;!DOCTYPE HTML PUBLIC \'-//W3C//DTD HTML 4.01 Transitional//EN\'&gt;\\n
&lt;meta http-equiv=\'content-type\' content=\'text/html; charset=utf-8\'&gt;

    &lt;link href=\'http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/styles/shCore.css\' rel=\'stylesheet\' type=\'text/css\'/&gt;
	&lt;link href=\'http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/styles/shThemeDefault.css\' rel=\'stylesheet\' type=\'text/css\'/&gt;
	&lt;script src=\'http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/scripts/shCore.js\' type=\'text/javascript\'&gt;&lt;/script&gt;
	&lt;script src=\'http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/scripts/shBrushCpp.js\' type=\'text/javascript\'&gt;&lt;/script&gt;
	&lt;script language=\'javascript\'&gt;
	SyntaxHighlighter.all();
	&lt;/script&gt;



 &lt;!----------------КОД-----------------------------&gt;
&lt;pre class=\'brush: cpp\'&gt;
#include &amp;lt;iostream&amp;gt;
&lt;br /&gt;
using namespace std;

int main(){
    setlocale(LC_ALL,&amp;quot;&amp;quot;);
    int Height,Weight;

    cout&amp;lt;&amp;lt;&amp;quot;Введите Ваш рост и вес:\\n&amp;quot;;
    cin&amp;gt;&amp;gt;Height&amp;gt;&amp;gt;Weight;

    cout&amp;lt;&amp;lt;&amp;quot;Ваш рост: &amp;quot;&amp;lt;&amp;lt;Height&amp;lt;&amp;lt;endl;
    cout&amp;lt;&amp;lt;&amp;quot;Ваш вес: &amp;quot;&amp;lt;&amp;lt;Weight&amp;lt;&amp;lt;endl;


}
&lt;/pre&gt;
 &lt;!----------------КОД-----------------------------&gt;
 &lt;/body&gt;&lt;/HTML&gt;

Должен предстать не в виде текста, а в виде кода HTML со своими тегами, а не сущностями вместо тегов.

KosBeg 22.08.2015 15:41

можно попробовать это - 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(/&lt;/g, '<')
    .replace(/&gt;/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(/&#0*39;/g, "'"); // PHP doesn't currently escape if more than one 0, but it should
    // string = string.replace(/&apos;|&#x0*27;/g, "'"); // This would also be useful here, but not a part of PHP
  }
  if (!noquotes) {
    string = string.replace(/&quot;/g, '"');
  }
  // Put this in last place to avoid escape being double-decoded
  string = string.replace(/&amp;/g, '&');

  return string;
}

laimas 22.08.2015 15:42

А зачем тогда преобразуется при выводе?

daslex 22.08.2015 16:14

Цитата:

Сообщение от laimas (Сообщение 385141)
А зачем тогда преобразуется при выводе?

Это мне вопрос?

KosBeg 22.08.2015 16:25

Цитата:

Сообщение от daslex
Это мне вопрос?

наверное к вам)

daslex 22.08.2015 16:25

Цитата:

Сообщение от KosBeg
quote_style

Это что за параметр?

Этот пример я попозже попробую.

laimas 22.08.2015 16:31

Цитата:

Сообщение от daslex
Это мне вопрос?

Ну а кому же еще. Зачем сервер преобразует, если на клиенте приходится делать обратное?

daslex 22.08.2015 16:34

С помощью php я беру текст из файла. Этот текст - это HTML код, в котором описан некоторый язык программирования (в моем случае c++)/ там маленький пример. Этот HTML код должен стать HTML страницей. Проще говоря, средствами javascript я открываю новое окно, в которое вписываю этот HTML код, который с помощью php беру из файла.
Если HTML не преобразовывать в php, то часть исходного HTML затрется, а это уже приведет к тому, что в переменной javascript окажется непонятно что. Чтобы javascript проглотил этот текст, приходится экранировать символы и HTML превращать в HTML сущности, но из-за этого в открываемом окне страница выглядит не как HTML страница, а как текст.
Я могу дать исходный HTML код. Если он нужен.
И еще у меня такая проблема, что даже если вышеприведенный код мне поможет, он убьет часть кода, где &gt; и некоторые символы изначально являются не HTML кодом, а HTML сущностями. (я об этом забыл вначале написать).

daslex 22.08.2015 16:36

В смысле исходный - это тот, который сначала редактируется, чтобы в переменную javascript попало, что надо. А потом обратная операция нужна, насколько я понял.

laimas 22.08.2015 16:40

Цитата:

Сообщение от daslex
Если HTML не преобразовывать в php, то часть исходного HTML затрется,

Это значит не удачно описывается - описание, это описание, а если что-то должно исполняться, то это уже исполняемый пример в описании.


Часовой пояс GMT +3, время: 18:06.