任何特殊的PHP函数,使字符串'url'友好的地址栏?

时间:2009-11-19 23:01:13

标签: php html

有没有这样的功能?

如果没有,任何人都有一个?

我需要在用户的网址“友好”中提交字符串,因为我稍后会将其用作我网站上帖子的网址。

由于

BTW,它的PHP!

7 个答案:

答案 0 :(得分:8)

听起来你想要用一些用户输入

Enter Name: ___Bob Smith_____

然后将该输入用作URL的一部分

http://example.com/bob-smith

如果这就是你所追求的,那么就没有PHP功能可以为你神奇地做到这一点。我对此类问题的处理方法是

  1. 将名称清理下来,以确保网址安全

  2. 如有必要,请在字符串末尾添加唯一的数据库标识符

  3. 使用正则表达式<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));
    }
}