2017-02-22 21 views
0

在我的網站中,我想使用德文字母ß,它只存在爲小寫字母。雖然我希望所有的標題都以大寫字母(大寫)顯示,但我使用font-transform: uppercase。但是用一個大寫的SS代替了ß字母,這是由於某些設計和編程功能而不想要的。正則表達式:將標題文本更改爲大寫

所以我在考慮preg_replace_callback,它將HTML代碼中標題中的所有字母都改爲大寫字母。

$content = preg_replace_callback('/(<h\d>)(.*)(<\/h\d>)/', function($matches) { 
    return $matches[1] . mb_strtoupper($matches[2], 'UTF-8') . $matches[3]; 
}, $content); 

因爲我總新手在正則表達式,我不知道怎麼寫那些上的標題,沒有特殊屬性或嵌套鏈接等效果很好。

基本上<h2 class="heading-italic"><a href="http://www.google.de">Google</a></h2>應該成爲<h2 class="heading-italic"><a href="http://www.google.de">GOOGLE</a></h2>

如何將我的正則表達式的樣子,這也趕上標題與屬性和也(多)嵌套的元素?

+0

我想推薦兩件事:1)堅持雙S用於大寫ß,因爲這被廣泛接受爲「正確」。 CSS這樣做有一個原因。這就像混合減/短劃線( -/- ),撇號/口音,[plenken](https://en.wikipedia.org/wiki/Plenken)等等:用戶理解它,但它是錯誤的。 2)[不要用正則表達式解析HTML](http://stackoverflow.com/a/1732454/3890673):-) – crusy

回答

0

變化/(<h\d>)(.*)(<\/h\d>)/這一個:

$newregex = '/(<h\d.*?>)(<a .*?>)?(.*)(<\/a>)?(<\/h\d>)/' ; 

$content = preg_replace_callback($newregex , function($matches) { 
    return $matches[1] . mb_strtoupper($matches[3], 'UTF-8') . $matches[5]; 
}, $content); 

mb_strtoupper($matches[3], 'UTF-8')[3]用於新的正則表達式和第3組。 group2和group4是可選的。