2010-03-11 59 views

回答

4

要更換「特殊字符」,則需要使用iconv$str = iconv('UTF-8', 'ASCII//TRANSLIT', $str);

至於引號之間得到的數值,看到其他的答案。使用preg_replace_callback對上述匹配項執行轉換。

編輯:填鴨式一切融合在一起:

<?php 
$input = 'ööbik'; 
$expected = 'ööbik'; 

// Set the locale of your input here. 
setlocale(LC_ALL, 'en_US'); 

// Convert using a callback. 
$output = preg_replace_callback('/href="([^"]+)"/', function ($matches) { 
    return iconv('UTF-8', 'ASCII//TRANSLIT', $matches[0]); 
}, $input); 

echo "Input: $input\n"; 
echo "Expected: $expected\n"; 
echo "Output: $output\n"; 

本示例假定PHP 5.3。如果您遇到PHP 5.2或更低版本,請使用「create_function」或命名函數。

+0

順便說一句,我完全同意不使用正則表達式解析HTML。例如,此代碼不適用於單引號href =''屬性。例如,使用DOMDocument :: loadHTML。 – janmoesen 2010-03-11 12:08:53

+0

我剛剛喜歡它,當新用戶來這裏得到一個快速的答案,然後vamoose!另外,我喜歡單詞「vamoose」。 – janmoesen 2010-03-19 18:04:52

0

雖然堆棧溢出問題Finding quoted strings with escaped quotes in C# using a regular expression可以幫助你找到引用的文字,我認爲更好的解決方案是通過解析HTML字符串和工作,其DOM做到這一點。

+0

我同意在HTML上使用regexp通常是一個壞主意,但是當您只需從HTML文檔中獲取特定的字符串(如單個屬性)時,正則表達式就沒有問題。 – Atli 2010-03-11 12:11:11

+0

同意,這取決於具體情況。 – Kamarey 2010-03-11 12:13:55

相關問題