2013-12-23 55 views
1

如何過濾字符串中的非字母數字字符,但不改變重音符號?刪除重音符號並過濾掉非字母數字字符

例如:

$string = "présentation d'un texte, avec des accents (en français!) & autres..." 

應改爲:

$string = "présentation dun texte avec des accents en français autres" 
+0

谷歌搜索我的問題。沒有找到解決方案。 – libertaire

+1

沒有狗屎sherlock。我試過閱讀手冊,我吮吸正則表達式。我可以找到如何過濾字母數字字符但不是重音。你的回覆是無用的。 – libertaire

回答

4

你可以試試這個正則表達式:

$str = "présentation d'un texte, avec des accents (en français!) & autres..."; 
echo preg_replace('/[^\p{L}\s\p{N}]+/u', '', $str); 
//=> présentation dun texte avec des accents en français autres 

Character類[^\p{L}\s\p{N}]+意味着匹配1個或多個字符的是NOT

  1. Unicode字母
  2. unicode的數字
  3. 空間

/u標誌是匹配Unicode字母。

3
$string = "présentation d'un texte, avec des accents (en français!) & autres..."; 
echo preg_replace('%[^\p{L}\s\p{N}]++%u', '', $string); 

輸出:

présentation dun texte avec des accents en français autres 

說明:

  • \p{L} - 所有字母
  • \p{N} - 所有數字
  • u - 治療模式字符串爲UTF- 8

正則表達式:將所有不是字母字符或數字或空白字符替換爲空('')。

有用的鏈接:Unicode character reference

Demo.

+1

根據OP'd'un'需要變成'dun'而不是'd un' – anubhava

+1

@anubhava:啊,我錯過了。謝謝,我現在已經更新了答案。 :) –

+0

@anubhava:我沒有複製你的答案。我實際上使用[這個答案](http://stackoverflow.com/a/16427088/1438393)作爲參考,但沒有注意到之前[你評論](http:// stackoverflow)之前'd'和'un'之間的空格。COM /問題/ 20737183 /刪除,口音和過濾出,非字母數字,字符/ 20737282#comment31071969_20737282)。我無法找到一種更清潔的方式來避開這個空間並使用'\ s'。儘管如此,我已經爲你成爲第一個解決這個問題的人提供了讚賞。乾杯:) –

1

測試使用PHP版本5.4.20和PHP版本5.2.3-20070601

<?php 
$text = "présentation d'un texte, avec des accents (en français!) & autres..."; 
$new = preg_replace("/[^a-zA-ZÀ-ÿ ]/", '', $text); 
echo $new; 
?> 

會產生présentation dun texte avec des accents en français autres

按貼:在dun之間沒有空格

présentation dun texte avec des accents en français autres 
相關問題