Лучший способ написать это, чтобы избежать содержимого HTML - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть строка с расширенным текстовым содержимым

что-то вроде этого, например

<code><p>Hello</p>

<br/>

<p> Christian </p>

<pre> Don't Know what to do 

Теперь я не хочу, чтобы скрипт присутствовал в вышеуказанном контенте и, если он есть, esape

так что если у меня есть контент, который выглядит так

<code><p>Hello</p>

<br/>

<p> Christian </p>
<script type="text/javascript"> alert("Hello")</script>
<pre> Don't Know what to do 

Необходимо заменить на

<code><p>Hello</p>

<br/>

<p> Christian </p>
&lt;script type="text/javascript"&gt; alert("Hello")&lt;/script&gt;
<pre> Don't Know what to do 

В настоящее время я разработал регулярное выражение для него

поэтому мой код выглядит примерно так

if content.match(/<script(.+?)>/) {
  content = content.replace(content.match(/<script(.+?)>/)[0],content.match(/<script(.+?)>/)[0].replace("<","&lt;").replace(">","&gt;"))
}
if content.match(/<\script\s*>/)
 {
content = content.replace(content.match(/<\/script\s*>/)[0],content.match(/<\/script\s*>/)[0].replace("<","&lt;").replace(">","&gt;"))
}

так что в результате у содержимого скрипта будет экранирован

Может кто-нибудь предложить мне более чистый способ достижения этого?

Ответы [ 3 ]

1 голос
/ 28 февраля 2012

Очиститель:

content = content.replace(/<(script[^>]*|\/script)>/g, '&lt;$1&gt;');

Однако, это, вероятно, не способ пойти по этому пути.Почему эти <script> теги в строке JS в первую очередь?

0 голосов
/ 28 февраля 2012

Я думаю, что вы должны уйти от серверной стороны этих графиков. Например, в PHP вы используете htmlentities

0 голосов
/ 28 февраля 2012

Не ответ, который вы ищете, но что, если JavaScript отключен? Собираетесь ли вы позволить неэкранированному контенту показываться на странице? Надеюсь, что нет

Экранирование должно выполняться с использованием серверных сценариев, таких как PHP, ASP.NET и т. Д.

Как и в PHP, htmlentities() [документы здесь] отлично подойдет

$escaped = htmlentities($content)
...