下面的解决方案有一个“SEO更友好”版本:function hyphenize($string) {

$dict = array(

"I'm"      => "I am",

"thier"    => "their",

// Add your own replacements here

);

return strtolower(

preg_replace(

array( '#[\\s-]+#', '#[^A-Za-z0-9\. -]+#' ),

array( '-', '' ),

// the full cleanString() can be downloaded from

http://www.unexpectedit.com/php/php-clean-string-of-utf8-chars-convert-to-similar-ascii-char

cleanString(

str_replace( // preg_replace can be used to support more complicated replacements

array_keys($dict),

array_values($dict),

urldecode($string)

)

)

)

);}function cleanString($text) {

$utf8 = array(

'/[áàâãªä]/u'   =>   'a',

'/[ÁÀÂÃÄ]/u'    =>   'A',

'/[ÍÌÎÏ]/u'     =>   'I',

'/[íìîï]/u'     =>   'i',

'/[éèêë]/u'     =>   'e',

'/[ÉÈÊË]/u'     =>   'E',

'/[óòôõºö]/u'   =>   'o',

'/[ÓÒÔÕÖ]/u'    =>   'O',

'/[úùûü]/u'     =>   'u',

'/[ÚÙÛÜ]/u'     =>   'U',

'/ç/'           =>   'c',

'/Ç/'           =>   'C',

'/ñ/'           =>   'n',

'/Ñ/'           =>   'N',

'/–/'           =>   '-', // UTF-8 hyphen to "normal" hyphen

'/[’‘‹›‚]/u'    =>   ' ', // Literally a single quote

'/[“”«»„]/u'    =>   ' ', // Double quote

'/ /'           =>   ' ', // nonbreaking space (equiv. to 0x160)

);

return preg_replace(array_keys($utf8), array_values($utf8), $text);}

上述功能的基本原理(我发现方式,道路低效-下面的一个更好)是不应命名的服务显然在URL上进行拼写检查和关键字识别。

在一个顾客的妄想症上失去了很长一段时间之后,我发现他们不想像力毕竟-他们的SEO专家(我绝对不是其中之一)报告说,把“Viaggi Economy Pauro”转换成viaggi-economy-peru“表现更好”viaggi-economy-per(以前的“清洗”删除了UTF 8字符;波哥大成波哥大, 麦德林成梅德伦等等)。

还有一些常见的拼写错误似乎影响了结果,对我来说唯一有意义的解释是我们的URL被解压,单词被单独挑出来,用来驱动天知道什么排序算法。这些算法显然都是用UTF 8清理过的字符串来完成的,所以“PEROME”变成了“秘鲁”而不是“PER”。“Per”和“per”不匹配,有点像在脖子上。

为了既保留UTF 8字符又替换一些拼写错误,下面的函数越快,就越准确(?)以上功能。$dict当然需要手工定制。

先前的回答

一个简单的方法:

// Remove all characters except A-Z, a-z, 0-9, dots, hyphens and spaces

// Note that the hyphen must go last not to be confused with a range (A-Z)

// and the dot, being special, is escaped with \

$str = preg_replace('/[^A-Za-z0-9\. -]/', '', $str);

// Replace sequences of spaces with hyphen

$str = preg_replace('/  */', '-', $str);

// The above means "a space, followed by a space repeated zero or more times"

// (should be equivalent to / +/)

// You may also want to try this alternative:

$str = preg_replace('/\\s+/', '-', $str);

// where \s+ means "zero or more whitespaces" (a space is not necessarily the

// same as a whitespace) just to be sure and include everything

请注意,您可能必须首先urldecode()URL,因为%20和+实际上都是空格-我的意思是,如果你有“永不放弃%20给%20 You%20 up”,你希望它变成永远不会放弃的,而不是20..你可能不需要,但我想我应该提一下这个可能性。

因此,完成的功能以及测试用例:function hyphenize($string) {

return

## strtolower(

preg_replace(

array('#[\\s-]+#', '#[^A-Za-z0-9\. -]+#'),

array('-', ''),

##     cleanString(

urldecode($string)

##     )

)

## )

;}print implode("\n", array_map(

function($s) {

return $s . ' becomes ' . hyphenize($s);

},

array(

'Never%20gonna%20give%20you%20up',

"I'm not the man I was",

"'Légeresse', dit sa majesté",

)));Never%20gonna%20give%20you%20up    becomes  never-gonna-give-you-up

I'm not the man I was              becomes  im-not-the-man-I-was

'Légeresse', dit sa majesté        becomes  legeresse-dit-sa-majeste

为了处理UTF-8,我使用了cleanString实现找到在线(链接被打破,但一个剥离的副本与所有不太深奥的UTF 8字符是在答案的开头;它也很容易添加更多的字符,如果你需要的话),将UTF 8字符转换为正常字符,从而尽可能保留“外观”一词。为了提高性能,可以将其简化并封装在这里的函数中。

上面的函数还实现了转换为小写-但这是一种体验。这样做的代码已被注释掉。

php 删除特殊符号,从字符串中删除所有特殊字符相关推荐

  1. 如何使用JavaScript从字符串中删除空格?

    本文翻译自:How to remove spaces from a string using JavaScript? How to remove spaces in a string? 如何删除字符串 ...

  2. 怎么批量删除html里的字段,如何从Excel中的字符串中删除所有HTML标签?

    如何从Excel中的字符串中删除所有HTML标签? 如果您的工作表包含用HTML标记括起来的文本字符串,现在,您想要从字符串中删除所有HTML标记,以使单元格清晰可见,如下面的屏幕截图所示. 本文,我 ...

  3. 从字符串中删除所有出现的char

    本文翻译自:Remove all occurrences of char from string I can use this: 我可以用这个: String str = "TextX Xt ...

  4. 如何从字符串中删除文本?

    本文翻译自:How to remove text from a string? I've got a data-123 string. 我有一个data-123字符串. How can I remov ...

  5. 从字符串中删除HTML标签

    是否有从Java字符串中删除HTML的好方法? 一个简单的正则表达式 replaceAll("\\<.*?>","") 可以使用,但& 不会 ...

  6. 如何从字符串中删除最后一个字符?

    我想从字符串中删除最后一个字符. 我尝试这样做: public String method(String str) {if (str.charAt(str.length()-1)=='x'){str ...

  7. 程序员面试题精选100题(36)-在字符串中删除特定的字符[算法]

    题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符.例如,输入"They are students."和"aeiou",则删除之后的第一个字符串变 ...

  8. C语言字符串中删除重复的字符的算法(附完整源码)

    C语言字符串中删除重复的字符的算法 C语言字符串中删除重复的字符的算法完整源码(定义,实现,main函数测试) C语言字符串中删除重复的字符的算法完整源码(定义,实现,main函数测试) #inclu ...

  9. (面试题)删除在另一个字符串中出现的字符

    题目: 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符.例如,输入"They are students."和"aeiou",则删除之后的第一个字符串 ...

最新文章

  1. 引入Redis|tensorflow实现 聊天AI--PigPig养成记(3)
  2. Linq to sql 消除列重复 去重复
  3. python种颜色循环_Python 实现一个颜色色值转换的小工具
  4. echart中拆线点的偏移_Real BIM | Rhino+Grasshopper在双曲异形玻璃幕墙中的应用
  5. C#EF中,使用类似于SQL中的% 模糊查询
  6. 空间注意力机制sam_Attention注意力机制介绍
  7. java 内部类调用_Java内部类使用总结
  8. protel99se的封装库
  9. Unity3D NGUI图文混排聊天表情
  10. 数学专业英语--2.5(几何)
  11. 我们为什么存在于三维空间而不是四维空间
  12. 限时免费领超大15.9GB的PS设计素材
  13. 宿迁卫校计算机多少钱一年,江苏宿迁卫生中等专业学校2021年招生录取分数线...
  14. lisp 焊接符号标注_焊接符号标注及表示方法-详解aws焊接符号、钢结构焊接符号含义大全...
  15. MySQL知识点总结(二)---查询操作
  16. 计算机网络人工智能论文,浅析计算机网络中人工智能的应用论文
  17. Aspose.Words在word文档合并时如何控制列表编号
  18. C - Monthly Expense
  19. String类型转换成LocalDate 和 LocalDateTime
  20. 实用软件收集(持续更新)

热门文章

  1. 2022-09-09 uni-app学习笔记(六) uniapp常用API,使用uniapp常用API(uni.chooseImage等)实现聊天框的选择图片和input框发送文本信息功能
  2. C语言基础之运算符、分支语句、循环语句、函数
  3. 腾讯云存储上传头像、文件功能(超详细保姆级)
  4. ubantu 设置root密码
  5. solidworks绘图技巧
  6. vue3+setup+validator验证两次输入密码是否一致(土法)
  7. html只让文字显示再消失,即时HTML只显示文字,但没有图像。
  8. 云鲸智能首次亮相上海进博会,引领行业发展新风向
  9. 制作简易计算器:接收用户输入,两个操作数,一个操作符,给出用户结果。2021/01/17
  10. Unity改变图片文本颜色