4

ここのstackoverflowで以下のスクリプトを見つけました.URLをきれいに構築するために、特殊文字をダッシュ​​に置き換えます。ただし、以下の「悪い」例に示すように、句読点をダッシュ​​に置き換えるため、うまく機能しません。したがって、代わりに、特に句読点を何かに置き換えずに削除することを希望しています...空白もダッシュもありません。これに関するヘルプは大歓迎です。

例:

今日の天気は暑いです!

良い:

今日の天気は暑い

悪い:

今日の天気は暑いです-

このスクリプトは悪い例を実行します...どうすれば良い結果が得られますか?:

function slugUrl($string) {
    $string = strtolower($string);
    $string = preg_replace('/[^a-zA-Z0-9]/i','-',$string);
    $string = preg_replace("/(-){2,}/",'$1',$string);
    return $string;
}
4

2 に答える 2

5

これはどうですか?(最初に句読点を削除しました)

function slugUrl($string){
    $string = strtolower($string);
    $string = preg_replace('/[!?\']/','',$string);
    $string = preg_replace('/[^a-zA-Z0-9]/i','-',$string);
    $string = preg_replace("/(-){2,}/",'$1',$string);
    return $string;
}
于 2012-12-30T16:09:23.127 に答える
1

最初に興味のない文字をすべて削除してから、スペースのみをダッシュ​​に置き換えることで実現できます。

さらにpreg_replace、配列を使用するときに複数の置換操作を一度に実行できます ( Demo ):

$subject = 'today\'s weather is hot!';

$buffer = trim(strtolower($subject));
$result = preg_replace(['/[^a-z0-9 ]/', '/\s+/'], ['', '-'], $buffer);

結果 (引用符なし):

"todays-weather-is-hot"

関数の形で:

function slugUrl($string){
    return preg_replace(
        array('/[^a-z0-9 ]/', '/\s+/'), 
        array(''            , '-'    ), 
        trim(strtolower($string))
     );
}
于 2012-12-30T16:21:04.297 に答える