2015-05-05 44 views
3

在我的文字的一個字符加空格我有這樣的輸出:如何配合PHP的preg_replace

埃APAT

我想搜索「A」,注意事項a +的空間。並將其轉換爲'Š'。

所以基本上我想找到這個字母后跟空格,並用一個字母替換爲空格。

替換字符串不能做到這一點,我不是很好的正則表達式,我都試過,但它不工作:

$return = preg_replace('/[Å\s]/', 'Š', $return); 

有人能幫助我嗎?

補充:這個單字「Åapat」的成長曆史不用在一個句型中,大部分時間在某個中點。

+0

爲什麼不能str_replace函數做到這一點? – putvande

+0

它看起來像一個編碼問題給我。搜索替代品不是解決方案,而只是更多,更難以解決的問題的來源。 – axiac

回答

3
$re = "/Å\\s/m"; 
$str = "Å apat"; 
$subst = "Š"; 

$result = preg_replace($re, $subst, $str); 

這應該爲你做。 See demo

+0

什麼都沒有發生......應用此正則表達式後,所有內容都保持不變。 –

+0

@ black-room-boy看demo.it works.' $ result'將被更新的字符串 – vks

+0

是的,這個例子很有用,但是當我將它應用到來自數據庫的文本時,它並沒有幫助我。看起來編碼已經搞亂了。感謝您的幫助。 –

0

這會幫助你:

$result = preg_replace('/Å /', 'Š', $text); 

你的正則表達式[Å\s]所做的是:
匹配一個字符或任一空白字符,並以S

更換
1

好像你正在試圖解決一個字符串替換的編碼問題(可能只是顯示問題)。

這不是要走的路!

讓我們看看會發生什麼:

如果你看你的字符串以十六進制查看器,你會發現這個十六進制序列:C5 A0

但根據上下文,這個順序可以以兩種不同的解釋方法:

C5 A0 = S(在UTF8編碼C5A0)= A(C5以Unicode)+ NO-BREAK SPACE(A0以Unicode)

如此看來,問題是,你的字符串顯示爲一系列unicode代碼點instea d是一個utf8編碼的字符串。

我認爲問題來自沒有好的編碼信息的html頁面。嘗試head標籤之間添加有關網頁的編碼信息:

  • HTML5:<meta charset="UTF-8"/>
  • HTML4:<meta http-equiv="content-type" content="text/html; charset=UTF-8">

鏈接:chartable with unicode code point and utf8 encoding