如果它们不是标记名称的一部分,则删除特殊字符

时间:2011-05-09 09:01:11

标签: php entities

任何人都可以帮助我吗? 我正在尝试使用正则表达式编辑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> 

如果它们是标签名称的一部分,我想用实体替换所有特殊字符。

例如在quates中,woud不会被替换,但在“egsge”中它们应该是。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用htmlentities函数将“特殊”字符编码为html实体。

但请记住,您的PHP代码应该创建HTML,尽管您应该完全控制何时对字符串进行编码。

答案 1 :(得分:1)

如果您将所有这些html代码作为单个字符串,请说$ string - 试试这个:

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

请检查htmlentities的参数,并注意匿名函数的使用仅在PHP 5.3.0之后可用。如果您使用的是早期版本,则只需编写一个命名函数即可获得解决方法。