Как использовать preg_replace снаружи <script></script> в php - PullRequest
0 голосов
/ 29 января 2010

У меня есть строка:

$source = '&
<script type="text/javascript">&</script>
&
<script type="text/javascript">&</script>
&';

Желаемый результат:

&amp;
<script type="text/javascript">&</script>
&amp;
<script type="text/javascript">&</script>
&amp;

Я пытаюсь с:

echo preg_replace("#&(?!amp;)(?!<\/script>)(?![^<]script.*?>)#i",
                  "&amp;", $source);

Но я могу заменить только первые "&", или они все заменены.

Как я могу получить этот результат?

Редактировать 1:

Теперь, если у меня есть строка:

$source = '&
<script type="text/javascript">text&text</script>
&
<script type="text/javascript">&</script>
&';

Желаемый результат:

&amp;
<script type="text/javascript">text&text</script>
&amp;
<script type="text/javascript">&</script>
&amp;

Ответы [ 3 ]

2 голосов
/ 29 января 2010

Попробуйте это

$output = preg_replace("/&(?!amp;)(?!<\/script>)(?![^<]script.*?>)/", "&amp;", $source);
1 голос
/ 29 января 2010

Остановите это с помощью регулярных выражений. Пожалуйста. Я не могу больше это терпеть. У меня болит голова, но только потому, что я бью ее по столу.

Я бы предложил использовать DOMDocument или SimpleXmlElement для синтаксического анализа строки, а затем перебрать все теги без сценариев для кодирования каждого амперсанда.

0 голосов
/ 29 января 2010

Использование модификатора g заменяет ваш матч глобально (каждый раз).

echo preg_replace("#&(?!amp;)(?!<\/script>)(?![^<]script.*?>)#ig",
                  "&amp;", $source);
...