2017-06-21 37 views
-1

我有一個帶有多個href屬性的文本字符串。我想用不同的鏈接替換它們。用不同的值替換字符串中的多個網址

我已經「爆炸」了原始鏈接數組和我想要替換的網址的鏈接數組。但我面臨的問題是,我不知道如何用新值更新字符串。

因此,以簡單的方式

$sting1 = 'bla bla bla <a href="some_url">some text</a> bla bla bla <a href="some_url2">some text 2</a> bla bla bla <a href="some_url3">some text 3 3</a>'; 

,並有串

$sting_new = 'bla bla bla <a href="some_new_url">some text</a> bla bla bla <a href="some_new_url2">some text 2</a> bla bla bla <a href="some_new_url3">some text 3 3</a>'; 

我知道我能「爆炸」這個HREF的和取代他們,但我怎麼可以更新$ sting1文本?

+0

我認爲你應該提供一個實際的例子,顯示輸入和預期的輸出。另外,如果你已經有了關於這個的任何代碼,你可能也想分享一下。 – domsson

回答

1

有兩種方法可以使用。一種是使用str_replace,它只需要一個子串(或者只是一個子串)來替換一個數組(或單個字符串)來替換它們。

另一種方法是類似的,使用preg_replace,這是類似str_replace,除了它使用正則表達式

+1

帶數組的'str_replace'似乎更好地回答了OP的問題,因爲OP似乎每次都有不同的URL值。 –

+1

@JulienLachal你可能是對的!不過,我覺得在展示其他選項可用時沒有任何傷害:) – Darvex

0

我認爲最好的辦法是使用正則表達式的兩件事情

<?php 
$regex  = '/href="([^"]*)"/si'; 
$ori_string = 'yourStringWithSomeHrefs'; 
$replacements = [ 
    'http://foo.bar', 
    'relativeLink', 
    // and so on 
]; 

if(preg_match_all($regex, $ori_string, $m, PREG_OFFSET_CAPTURE)) { 
    foreach($m[1] as $key => $value) { 
     $ori_string = substr_replace($ori_string, $replacements[$key], $value[1], str_len($value[0])); 
    } 
} 

講究

  1. 這段代碼沒有經過測試
  2. 這種重gular表達式只對雙引號href有用。如果你需要得到單引號和雙引號,你需要使用更復雜的正則表達式
相關問題