有没有这样的功能?
如果没有,任何人都有一个?
我需要在用户的网址“友好”中提交字符串,因为我稍后会将其用作我网站上帖子的网址。
由于
BTW,它的PHP!
答案 0 :(得分:8)
听起来你想要用一些用户输入
Enter Name: ___Bob Smith_____
然后将该输入用作URL的一部分
http://example.com/bob-smith
如果这就是你所追求的,那么就没有PHP功能可以为你神奇地做到这一点。我对此类问题的处理方法是
将名称清理下来,以确保网址安全
如有必要,请在字符串末尾添加唯一的数据库标识符
使用正则表达式<1>非常容易
$url = strToLower(preg_replace('%[^a-z0-9_-]%six','-',$name)); //does a-z catch unicode?
这会将Bob Smith
变成bob-smith
。
如果为每个字符串获取一个唯一的片段对您很重要,那么您需要为#2提出一些方案。请考虑以下字符串
Bob Smith
Bob" Smith
他们都将被消毒至
Bob--Smith
您有可能将此信息存储在数据库中,因此将主键附加到字符串将起作用。您还可以将主键作为URL的一部分合并。例如,假设主键是一个简单的整数auto_increment
。
http://example.com/27/bob-smith/
http://example.com/bob-smith_27
答案 1 :(得分:2)
答案 2 :(得分:1)
有urlencode,但我不确定这是否正是您正在寻找的
答案 3 :(得分:0)
如果您正在运行Apache,我认为您正在寻找mod_rewrite,这是一个允许重写用户友好URL的Apache模块。可以找到初学者指南here。在深入研究之前,请确保您的主机或服务器支持mod_rewrite。
答案 4 :(得分:0)
如果要将非ASCII字符显示为原样而不是百分比编码的字,则需要使用Unicode并使用UTF-8对URL进行编码。因此,如果要在URL中使用Ä
字符,请使用UTF-8编码字0xC384,而不是ISO 8859-1编码字0xC4。差异(看一下状态栏中的URL):
答案 5 :(得分:0)
可能是你想要的东西就像一个wordpress post slug。在wordpress中,函数(sanitize_title_with_dashes)基本上清理输入,编码并创建一个' - '分隔的URL。
答案 6 :(得分:0)
我确实相信你想要的是将New Storm Hits Winter!
变成像new-storm-hits-winter
这样的东西。
此功能从CodeIgniter“被盗”并完全执行:
/**
* Create URL Title
*
* Takes a "title" string as input and creates a
* human-friendly URL string with either a dash
* or an underscore as the word separator.
*
* @access public
* @param string the string
* @param string the separator: dash, or underscore
* @return string
*/
if ( ! function_exists('url_title'))
{
function url_title($str, $separator = 'dash', $lowercase = FALSE)
{
if ($separator == 'dash')
{
$search = '_';
$replace = '-';
}
else
{
$search = '-';
$replace = '_';
}
$trans = array(
'&\#\d+?;' => '',
'&\S+?;' => '',
'\s+' => $replace,
'[^a-z0-9\-\._]' => '',
$replace.'+' => $replace,
$replace.'$' => $replace,
'^'.$replace => $replace,
'\.+$' => ''
);
$str = strip_tags($str);
foreach ($trans as $key => $val)
{
$str = preg_replace("#".$key."#i", $val, $str);
}
if ($lowercase === TRUE)
{
$str = strtolower($str);
}
return trim(stripslashes($str));
}
}