1

こんにちは、初めて preg_replace を扱い、特に学習者を理解するのが非常に複雑であることがわかりました。

タイトル文字列を URL 構造のスラッグに変更して、すべての特殊文字を削除し( ) ? *、複数のスペースを単一に置き換えて-、すべてのテキストを小文字に変換しようとしています。

ここに私の面白いコードがありますが、欲望の出力が得られません。

$title_slug = $q_slug->title;
$title_slug = preg_replace("/[\s+\?]/", " ", $title_slug);        
$title_slug = str_replace("  ", " ", $title_slug);
$title_slug = str_replace(" ", "-", $title_slug);
$title_slug = preg_replace("/[^\w^\_]/"," ",$title_slug);
$title_slug = preg_replace("/\s+/", "-", $title_slug);
$title_slug = strtolower($title_slug);

return $title_slug;

編集:例を追加

例:if my title is what is * the() wonder_ful not good?? and where??? 結果:if-my-title-is-what-is-the-wonder_ful-not-good-and-where

お気軽に笑ってください:)そして、助けてくれてありがとう。

4

3 に答える 3

3

クリーンな URL ジェネレーターについては、このチュートリアルを参照してください。または、正規表現を完全に回避するこの既存の SO ソリューションを使用することもできます。これはおそらく仕事を成し遂げるでしょう:

function toAscii($str) {
   $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
   $clean = preg_replace("/[^a-zA-Z0-9\/_| -]/", '', $clean);
   $clean = strtolower(trim($clean, '-'));
   return preg_replace("/[\/_| -]+/", '-', $clean);
}
于 2013-01-27T18:53:02.090 に答える
2

これを行うための優れた関数を次に示します。

function toSlug ($string) {
        $string = strtolower($string);
        // Strip any unwanted characters
        $string = preg_replace("/[^a-z0-9_\s-]/", "", $string);
        // Clean multiple dashes or whitespaces
        $string = preg_replace("/[\s-]+/", " ", $string);
        // Convert whitespaces and underscore to dash
        $string = preg_replace("/[\s_]/", "-", $string);

        return $string;
}
于 2013-01-27T18:51:27.853 に答える
1

これを試して:

$string = strtolower($string);
$string = preg_replace("/\W+/", "-", $string); // \W = any "non-word" character
$string = trim($string, "-");
于 2013-01-27T18:53:48.160 に答える