我的問題是如何在這個例子中更換<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