我的问题是如何在这个例子中更换<script>
标签的src
值在字符串中一样(当然,我需要这样的属性的更一般的情况下内标签):PHP的preg_replace财产html标签内
$data = <<<EOD
<script language="javascript" src= "../tests/ajax-navigation.js"></script>
...
<img src="../404.jpg" alt="404">
...
EOD;
我用PHP这样的功能:
class Search{
public static function replaceProperty($data, $start, $end, $property, $alias, $limit = -1){
//get blocks formed as: $start $property = "..." $end or $start $property = '...' $end
$pattern = "!(".$start."){1}(.*?)".$property."\s*=\s*[\"\'](.*?)[\"\'](.*?)(".$end."){1}!s";
$data = \preg_replace($pattern, "{$start}\${2}{$property}=\"{$alias}\"\${4}{$end}", $data, $limit);
return $data;
}
}
我把它叫做是这样的:
$data = Search::replaceProperty($data, "<script", ">", "src", $alias);
真奇怪的是,<script>
和<img>
都变了! 我当然可以这样调用它
$data = Search::replaceProperty($data, "<script", "</script>", "src", $alias);
但这并不回答一般情况下!
只是为了澄清一些观点与正则表达式:
我。要搜索的实际字符串是:
$data = <<<EOD
<script language="javascript" src= "../tests/ajax-navigation.js"></script>
...
<script language="javascript" type="text/javascript">
...
<img src="../404.jpg" alt="404">
...
EOD;
ii。正则表达式$pattern = "!(".$start."){1}(.*?)".$property."\s*=\s*[\"\'](.*?)[\"\'](.*?)(".$end."){1}!s";
或在最简单的形式$pattern = "%".$start."(.*?)".$property."\s*=\s*[\"\'](.*?)[\"\'](.*?)".$end."%s";
(仅3子模式)标识第一<script>
预期。但它需要第二<script>
并终止在第一<img>
的>
改变任何src
财产它之间找到了!
iii。通过在导致$pattern = "%".$start."(.*?)".$property."\s*=\s*[\"\'](.*?)[\"\'](.*?)".$end."%";
表现为预期,但失败时,标签与破碎的图案的端删除s
元字符进入:
<script language="javascript" src= "../tests/ajax-navigation.js"
></script>
IV。当然我的意图是替换而不是删除src
属性的值。
希望这些说明我的问题。
我决定使用DOMDocument并在这里发布一个问题:http://stackoverflow.com/questions/18031974/replace-property-of-an-html-tag-with-phps-domdocument – centurian