如何将字符串转换为字母数字并将空格转换为破折号?

时间:2012-01-08 03:49:38

标签: php

我想取一个字符串,删除所有非字母数字字符并将所有空格转换为短划线。

3 个答案:

答案 0 :(得分:12)

每当我想将标题或其他字符串转换为URL slugs时,我都会使用以下代码。它通过使用RegEx将任何字符串转换为字母数字字符和连字符来完成您要求的一切。

function generateSlugFrom($string)
{
    // Put any language specific filters here, 
    // like, for example, turning the Swedish letter "å" into "a"

    // Remove any character that is not alphanumeric, white-space, or a hyphen 
    $string = preg_replace('/[^a-z0-9\s\-]/i', '', $string);
    // Replace all spaces with hyphens
    $string = preg_replace('/\s/', '-', $string);
    // Replace multiple hyphens with a single hyphen
    $string = preg_replace('/\-\-+/', '-', $string);
    // Remove leading and trailing hyphens, and then lowercase the URL
    $string = strtolower(trim($string, '-'));

    return $string;
}

如果您要使用该代码生成URL slugs,那么您可能需要考虑添加一些额外的代码,以便在80个字符左右后删除它。

if (strlen($string) > 80) {
    $string = substr($string, 0, 80);

    /**
     * If there is a hyphen reasonably close to the end of the slug,
     * cut the string right before the hyphen.
     */
    if (strpos(substr($string, -20), '-') !== false) {
        $string = substr($string, 0, strrpos($string, '-'));
    }
}

答案 1 :(得分:11)

啊,我之前用过博客文章(用于网址)。

代码:

$string = preg_replace("/[^0-9a-zA-Z ]/m", "", $string);
$string = preg_replace("/ /", "-", $string);

$string将包含已过滤的文字。你可以回应它或用它做任何你想做的事。

答案 2 :(得分:0)

$string = preg_replace(array('/[^[:alnum:]]/', '/(\s+|\-{2,})/'), array('', '-'), $string);