2012-01-08 11 views
4

文字列を取り、英数字以外のすべての文字を取り除き、すべてのスペースをダッシュ​​に変換したいと考えています。文字列を英数字に変換し、スペースをダッシュ​​に変換するにはどうすればよいですか?

+1

の可能性が重複する[php /正規表現: "linkify" ブログのタイトル](http://stackoverflow.com/questions/3244651/php-regex-linkify-blog-titles)の – mario

+0

可能な複製[php/regex:ブログタイトルをリンクする](https://stackoverflow.com/questions/3244651/php-regex-linkify-blog-titles) – primpap

答えて

10

見出しやその他の文字列をURLスラッグに変換する場合は、次のコードを使用します。 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スラグを生成するためのコードを使用しようとしている場合は、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, '-')); 
    } 
} 
+0

コードを共有していただきありがとうございます。かなり正確に私が探していたもの。 – Decoy

11

ああ、ブログの投稿(URL用)にこれを使用しました。

コード:

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

$stringを濾過したテキストが含まれています。あなたはそれをエコーし​​たり、それを使って何でもしたりすることができます。

+0

この回答が好きなら、この右側のチェックマークをクリックしてください役職。 – blake305

+0

最初に2行目をしてはいけませんか?また、最初のpreg_replaceステートメントの最後にある "m"の目的は正確ですか?ありがとう – Decoy

+0

Decoyと同様に、英数字以外の文字は空白を含む1行目に置き換えられているため、2行目は何も置き換えません。 – Josh

0
$string = preg_replace(array('/[^[:alnum:]]/', '/(\s+|\-{2,})/'), array('', '-'), $string); 
関連する問題