我使用preg_replace
來匹配並用適當的字符替換不正確編碼的UTF-8字符。我創建了一個包含錯誤字符的「舊」數組,以及一個帶有替換項的相應「新」數組。下面是每個陣列的一個片段:preg_replace:如何在更換之前考慮整個陣列的模式?
$old = array(
'/â€/',
'/’/',
);
$new = array(
'†',
'’',
);
(注意:如果你很好奇,爲什麼我這樣做,read more here)
可能包含錯誤的數據樣本字符串可以爲:
The programmer’s becoming very frustrated
應該變成:
The programmer's becoming very frustrated
我使用這個功能:
$result = preg_replace($old, $new, $str);
但拍攝對象實際上成爲:
The programmer†™s becoming very frustrated
很顯然,PHP是做什麼的我稱之爲非貪婪匹配的主題(不正確的術語在這裏使用,我知道)。 preg_replace
正在執行舊/新陣列中第一對的替換,而不考慮模式數組中是否存在更適合的不同模式。如果我顛倒替換對的順序,那麼它按預期工作。
我的問題是:有沒有一種方法可以讓preg_replace
在執行替換之前考慮模式數組的所有元素,還是我唯一的重新排序數組的選項?
請注意,不需要'array_values()'函數。 –
謝謝@CasimiretHippolyte,我編輯了答案。 :) –