4

次のようなストーリーのURLにダッシュを付けてスラッグを作成しました。

IDの代わりにスラッグを使用してレコードをフェッチする

これはスラッグを作成するための私のコードです:

function Slugit($title) {
    $title = strip_tags($title);
    // Preserve escaped octets.
    $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title);
    // Remove percent signs that are not part of an octet.
    $title = str_replace('%', '', $title);
    // Restore octets.
    $title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title);


    $title = remove_accents($title);
    if (seems_utf8($title)) {
        if (function_exists('mb_strtolower')) {
            $title = mb_strtolower($title, 'UTF-8');
        }
        $title = utf8_uri_encode($title, 500);
    }

    $title = strtolower($title);
    $title = preg_replace('/&.+?;/', '', $title); // kill entities
    $title = str_replace('.', '-', $title);
    $title = preg_replace('/[^%a-z0-9 _-]/', '', $title);
    $title = preg_replace('/\s+/', '-', $title);
    $title = preg_replace('|-+|', '-', $title);
    $title = trim($title, '-');


    return $title;
}

ダッシュが表示されているように、ここまではすべて問題ありません。しかし、リンクをクリックすると、ダッシュなしで通常どおりに保存されているため、データベースを開いて見つけることができません。

だから私はダッシュを削除するために何かを書いた:

$string = str_replace('-', ' ', $string);

ただし、?または.URLにある場合は、表示できません。

元のURLを取り戻すためのヘルプはありますか?!

4

2 に答える 2

8

このようなURLがある場合:

https://stackoverflow.com/questions/2647789/problem-in-displaying-a-slug-with-dash

そのproblem-in-displaying-a-slug-with-dash部分はそれほど重要ではありません:それはただいいです:

  • 表示する
  • ユーザーが読んで、質問の内容を確認できるようにする
  • 検索エンジンのために、SEOメカニズムとして。


そのURLで本当に重要なのは、その2647789部分です。これは、データベース内の質問の識別子です。つまり、質問の読み込みに使用されるURLの部分です。

これは、スラッグをユーザーが最初に入力したものに変換する必要がないことを意味します。重要なのは、各URLでデータの識別子を渡し、それを使用してデータを検索することだけです。


そして、ある種の証拠が必要な場合:スラッグなしでダッシュ付きのURLスラッグを表示する際の問題に進んでみてください:質問がうまくロードされることがわかります;-)

于 2010-04-15T18:05:51.653 に答える
0

数値IDがなく、スラッグだけを使用してデータベース内のレコードを識別する場合。次に、スラッグをデータベースにも保存し、そのスラッグでクエリを実行するだけです。

于 2010-04-15T18:13:02.540 に答える