2013-12-23 56 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 
相关问题