удаление специальных символов, если они не являются частью имен тегов - PullRequest
1 голос
/ 09 мая 2011

Кто-нибудь может мне помочь? Я пытаюсь редактировать HTML-код с помощью регулярных выражений.

HTML-код выглядит примерно так:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title></title>
        <link href="css/style.css" rel="stylesheet"
        type="text/css" media="screen" />
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    </head>
    <body>
    <div id="wrapper">

    <div id="content">

    <div class="textArea">

    <div class="textLeft">

<h2>ökföäa äaf aäpig</h2>
<p> fkjafkhafkha</p>
<p>aklfjöl ölafj aljföla</p>    
</div>

<div class="textCenter">

<h2>rueueueu</h2>
<p>
eegeg eg<br />
eg "egsge"<br />
sgesgeg<br />
<a href="http://">gsgs sgsey</a>
</p>

</div>
</div>
</div>
</div>
</body>
</html> 

Мне бы хотелось заменить все специальные символы на сущности, если они не являются частью имен тегов.

Например, в кавычках не должно быть заменено, но в «egsge» они будут.

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Если у вас есть весь этот html-код в виде одной строки, скажем $ string - попробуйте это:

$string = preg_replace_callback('/>(.*)</Us',function($match){return '>'.htmlentities($match[1],ENT_QUOTES,'UTF-8').'<';},$string);

Пожалуйста, проверьте параметры htmlentities и обратите внимание, что использование анонимных функций доступно только начиная с PHP 5.3.0. Если вы используете более раннюю версию, вы можете просто написать именованную функцию, чтобы обойти это.

1 голос
/ 09 мая 2011

Вы можете использовать функцию htmlentities для кодирования ваших "специальных" символов в HTML-объекты.

Однако помните, что ваш php-код должен создавать HTML, и хотя вы должны иметь полный контроль над тем, когда кодировать свои строки.

...