2011-07-12 47 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' 第一。

相关问题