我在我的网站上使用此函数将用户输入转换为可接受的URL:
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);
}不过,我对它的数字有点问题。出于某些原因,当我尝试的时候:
echo urlize("test 23342");我得到了“测试”。为什么会这样?我该如何修复它?
非常感谢!
发布于 2010-05-26 16:00:44
问题出在您的utf2ascii中。我建议你改用iconv()函数。
iconv("UTF-8", "ISO-8859-1//IGNORE", $string);输出编码中的//IGNORE部分表示忽略它无法转换的任何字符。坏消息是你失去了所有的重音字符。要保留它们,可以使用//TRANSLIT。
然后,您可以使用strtolower和一些regexp来消除非字母数字字符(或将它们替换为-)。
如果你想对任何数据进行编码,也有urlencode(),但这不会让你有很好的链接。
发布于 2010-05-26 15:58:37
嘿,看起来你在试着创建一个弹头。如果是这样,这是我使用/建议的函数:
function slug( $string ) {
return strtolower( preg_replace( array( '/[^-a-zA-Z0-9\s]/', '/[\s]/' ), array( '', '-' ), $string ) );
}发布于 2010-05-26 20:57:57
urlencode()有什么问题?
https://stackoverflow.com/questions/2910976
复制相似问题