2011-07-12 85 views
1

我正在瀏覽一個HTML文件,用新文件替換所有對外部文件的引用,但是,有時這會導致錯誤。如何停止str_replace只替換部分文件名?

例如:我要替換的styles.css1.cssiestyles.css所有實例2.css所有實例在此源代碼:

<html> 
    <link href="styles.css" /> 
    <link href="iestyles.css" /> 
</html> 

一旦我跑str_replace("styles.css", "1.css", $html);源代碼如下所示:

<html> 
    <link href="1.css" /> 
    <link href="ie1.css" /> 
</html> 

因此,當我運行第二個查詢時,它不會更改iestyles.css引用,因爲它不再存在。有沒有解決的辦法?我想我可以發明一個精細的正則表達式,但是有很多變量需要考慮,因爲並不是所有的代碼都是正確的。

乾杯

回答

3

只要改變順序:先用2.css取代iestyles.css,然後用1.css替換styles.css

如果您確定文件名是href -attribut內的唯一的事情,你也可以包括雙引號"

$html = str_replace('"styles.css"', '"1.css"', $html); 
$html = str_replace('"iestyles.css"', '"2.css"', $html); 
+1

級聯大到小= +1 – cwallenpoole

+0

OP也可以替代'ie1.css'的第二個:) :) – wanovak

+0

事情是,我無法確定文件名將是什麼 - 這只是一個例子。那麼如果有一個巨大的參考文獻被替換,我怎麼知道該先做哪個?我也無法確定是否使用了雙引號或單引號,或者確實如果使用了引號。正如我所說,並非所有代碼都是格式良好的。 –

0

包括雙引號(假設他們都使用雙引號)應該工作。

str_replace('"styles.css"', '"1.css"', $html); 
+0

是的,我不能確定他們將始終使用雙引號:\ –

0

use preg_replace();

preg_replace('|<link href="styles\.css" />|', '1.css', $html); 

或之前styles

str_replace('"styles.css', '"1.css', $html); 
+0

我無法確定鏈接的格式每次都是相同的。 –

0

前面加上雙引號就在您更換新的報價。

取代"styles.css""1.css"

0

你可以改變 'iestyles.css' 第一。

相關問題