2012-08-11 53 views
3

我有一個字符串(從如果它使任何區別一個MySQL數據庫中獲取),它看起來很普通:爲什麼我嘗試替換字符串中的字符失敗?

Manufacture: <a href="http://www.x.com/">Blah</a> 

的問題是,Manufacture:<a>標籤之間的空間有194則charCode,而不是32如我所料。

這是造成preg_match下列分配失敗(請忽略了與正則表達式解析HTML的嘗試,我知道這不是一個好主意,但這個特殊的數據集是足夠預見它逃脫):

/Manufacture: *(<a[^>]*>([A-Za-z- 0-9]+)<\/a>)/i 

如果我用文本編輯器中的正常空格字符替換流氓空間,然後再試一次,表達式按預期匹配,但我需要以編程方式修改它。

我試圖str_replace

$text = str_replace(chr(194), ' ', $text); 

preg_match仍然失敗。然後,我嘗試preg_replace

$text = preg_replace('/[\xC2]/', ' ', $text); 

但是,這並不通過preg_match確實包含預期的匹配任何工作,即使運行相同的模式。

有沒有人有任何想法?

+2

你確定它的編碼點194?這應該是「大寫字母A,帶有迴音」而不是間距字符。 – Bobulous 2012-08-11 15:52:48

+0

@ user1515834正面的,我將字符複製到剪貼板上,並通過'ord()'運行,它返回194.另外'preg_match('/ [\ xC2] /',$ text);'返回'TRUE',確認那個角色肯定在那裏(C2在194)(十六進制) – Clive 2012-08-11 15:55:49

+0

所以它應該是大寫的A,帶有旋律,當然?爲什麼它作爲你的空間出現? – Bobulous 2012-08-11 15:56:20

回答

4

能否請你檢查MySQL表你來自哪裏得到$文本內容的結構?如果排序規則是utf8_general_ci或類似的東西,那麼你的字符串很可能包含一個雙字節的UNICODE字符。

enter image description here

如果是這樣的話,那麼PHP函數iconv應該做的伎倆。這裏是PHP手冊的例子。 IGNORE選項應該從字符串中刪除UNICODE字符。

<?php 
$text = "This is the Euro symbol '€'."; 

echo 'Original : ', $text, PHP_EOL; 
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL; 
echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL; 
echo 'Plain : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL; 

?> 

上例的輸出類似於:

Original : This is the Euro symbol '€'. 
TRANSLIT : This is the Euro symbol 'EUR'. 
IGNORE : This is the Euro symbol ''. 
Plain : 
Notice: iconv(): Detected an illegal character in input string in .\iconv-example.php on line 7 
This is the Euro symbol ' 
+0

輝煌必須一直是問題,使用帶有'IGNORE'選項'iconv'工作過。非常感謝 – Clive 2012-08-11 19:55:10

0

如果您嘗試匹配任何空格字符,該怎麼辦?
像這樣:

/Manufacture:\s*(<a[^>]*>([A-Za-z- 0-9]+)<\/a>)/i 
+0

謝謝,我已經嘗試過,沒有運氣 – Clive 2012-08-11 16:00:40

+0

如何使用「。」 (任何角色)?我可以離開基地,但PHP使用UTF-8字符編碼嗎?也就是說,這個字符可以是一個雙字節的UNICODE字符嗎? – HeatfanJohn 2012-08-11 16:06:49

+0

@HeatfanJohn這看起來越來越有可能,感謝指針...不要背叛我對這個主題的無知(!),但你會知道我怎樣才能用PHP中的空間替換unicode字符? – Clive 2012-08-11 16:11:14

相關問題