我想有一个函数从Unicode字符串创建鼻涕虫,例如gen_slug('Andrés Cortez')应该返回andres-cortez。我该怎么做呢?
当前回答
这可能也是一种方法。灵感来自这些链接专家交流和alinalexander
function slugifier($txt){
/* Get rid of accented characters */
$search = explode(",","ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u");
$replace = explode(",","c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u");
$txt = str_replace($search, $replace, $txt);
/* Lowercase all the characters */
$txt = strtolower($txt);
/* Avoid whitespace at the beginning and the ending */
$txt = trim($txt);
/* Replace all the characters that are not in a-z or 0-9 by a hyphen */
$txt = preg_replace("/[^a-z0-9]/", "-", $txt);
/* Remove hyphen anywhere it's more than one */
$txt = preg_replace("/[\-]+/", '-', $txt);
return $txt;
}
其他回答
你可以看看Normalizer::normalize(),看这里。它只需要加载PHP的intl模块
如果使用Core中已经实现的东西呢?
//Clean non UTF-8 characters
Mage::getHelper('core/string')->cleanString($str)
或者核心url/ url重写方法之一..
这可能也是一种方法。灵感来自这些链接专家交流和alinalexander
function slugifier($txt){
/* Get rid of accented characters */
$search = explode(",","ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u");
$replace = explode(",","c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u");
$txt = str_replace($search, $replace, $txt);
/* Lowercase all the characters */
$txt = strtolower($txt);
/* Avoid whitespace at the beginning and the ending */
$txt = trim($txt);
/* Replace all the characters that are not in a-z or 0-9 by a hyphen */
$txt = preg_replace("/[^a-z0-9]/", "-", $txt);
/* Remove hyphen anywhere it's more than one */
$txt = preg_replace("/[\-]+/", '-', $txt);
return $txt;
}
更新
由于这个答案引起了一些关注,我在这里添加了一些解释。
所提供的解决方案基本上将用-(连字符)替换除A-Z、A-Z、0-9和-(连字符)之外的所有内容。因此,它不能与其他unicode字符(URL段码/字符串的有效字符)正常工作。一种常见的情况是输入字符串包含非英语字符。
只有当您确信输入字符串不会包含unicode字符时才使用此解决方案,您可能希望这些字符成为output/slug的一部分。
如。“नारीशक्ति”将成为 "----------" ( 连字符)而不是“नारी——शक्ति”(有效的URL蛞蝓)。
回答
$slug = strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', $string)));
对于标准的字母数字英语-没有复杂。
/**
* Update the provided string to a slug-safe format.
*
* @param string $string
* @return string
*/
function slugify($string)
{
return strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', $string), '-'));
}
推荐文章
- 从IP地址获取位置
- 获取数组值的键名
- HTTPS和SSL3_GET_SERVER_CERTIFICATE:证书验证失败,CA is OK
- PHP -获取bool值,当为false时返回false
- 在foreach中通过引用传递
- 如何触发命令行PHP脚本的XDebug分析器?
- 如何找出如果你使用HTTPS没有$_SERVER['HTTPS']
- 更好的方法检查变量为null或空字符串?
- 当使用Composer的开发/生产开关时,如何正确部署?
- 自动删除Laravel (Eloquent ORM)中的相关行
- 在取消设置元素后重新设置数组键
- 如何修剪空白的数组值在php
- PHP中的双not(!!)操作符
- 在PHP5中创建单例设计模式
- 阻止人们入侵基于php的Flash游戏高分表的最佳方法是什么