PHP urlize 函数

标签 php dynamic

我在我的网站上使用此功能将用户输入转换为可接受的 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");

我得到“test-eiioe”。这是为什么?我该如何解决它?

非常感谢!

最佳答案

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

iconv("UTF-8", "ISO-8859-1//IGNORE", $string);

输出编码中的//IGNORE部分意味着忽略任何它无法翻译的字符。坏消息是你会丢失所有带重音的字符。要保留它们,您可以使用//TRANSLIT。

然后,您可以使用 strtolower 和一些正则表达式来消除非字母数字字符(或用 - 替换它们)。

如果您想对任何数据进行编码,也可以使用 urlencode(),但这不会为您提供良好的链接。

关于PHP urlize 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2910976/

相关文章:

c#动态行为?

php - 如何遍历数组以插入数据库

java - 动态代码分析和渗透测试之间的区别?

php - $str = "1,2,3,4,5,6,7";如何获得值的总和?

php - Laravel 护照 : registered date claims is deprecated

android - ListView 放在 ScrollView 中,是个坏主意吗?那么如何替换 ScrollView 中动态填充的列表呢?

c# - 验证 IEnumerable<dynamic> 内容的单元测试

javascript - 将动态文本输入传递给 PHP 以写入文本文件

php - PHP 单例类的最佳实践

php - Laravel 5 查询生成器和 NOW() 用于日期比较