首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP urlize函数

PHP urlize函数
EN

Stack Overflow用户
提问于 2010-05-26 15:42:54
回答 5查看 3.2K关注 0票数 2

我在我的网站上使用此函数将用户输入转换为可接受的URL:

代码语言:javascript
复制
function urlize($url) { 
$search = array('/[^a-z0-9]/', '/--+/', '/^-+/', '/-+$/' ); 
$replace = array( '-', '-', '', ''); 
return preg_replace($search, $replace, utf2ascii($url)); 
}     
function utf2ascii($string) { 
$iso88591  = "\\xE0\\xE1\\xE2\\xE3\\xE4\\xE5\\xE6\\xE7"; 
$iso88591 .= "\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF"; 
$iso88591 .= "\\xF0\\xF1\\xF2\\xF3\\xF4\\xF5\\xF6\\xF7"; 
$iso88591 .= "\\xF8\\xF9\\xFA\\xFB\\xFC\\xFD\\xFE\\xFF"; 
$ascii = "aaaaaaaceeeeiiiidnooooooouuuuyyy"; 
return strtr(mb_strtolower(utf8_decode($string), 'ISO-8859-1'),$iso88591,$ascii); 
}

不过,我对它的数字有点问题。出于某些原因,当我尝试的时候:

代码语言:javascript
复制
echo urlize("test 23342");

我得到了“测试”。为什么会这样?我该如何修复它?

非常感谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-26 16:00:44

问题出在您的utf2ascii中。我建议你改用iconv()函数。

代码语言:javascript
复制
iconv("UTF-8", "ISO-8859-1//IGNORE", $string);

输出编码中的//IGNORE部分表示忽略它无法转换的任何字符。坏消息是你失去了所有的重音字符。要保留它们,可以使用//TRANSLIT。

然后,您可以使用strtolower和一些regexp来消除非字母数字字符(或将它们替换为-)。

如果你想对任何数据进行编码,也有urlencode(),但这不会让你有很好的链接。

票数 2
EN

Stack Overflow用户

发布于 2010-05-26 15:58:37

嘿,看起来你在试着创建一个弹头。如果是这样,这是我使用/建议的函数:

代码语言:javascript
复制
function slug( $string ) {
    return strtolower( preg_replace( array( '/[^-a-zA-Z0-9\s]/', '/[\s]/' ), array( '', '-' ), $string ) );
}
票数 2
EN

Stack Overflow用户

发布于 2010-05-26 20:57:57

urlencode()有什么问题?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2910976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档