0

変数内のすべてのスペースをダッシュ​​に変更するコードがあります

function url($string) {
  //lower case everything
  $string = strtolower($string);

  //make alphaunermic
  $string = trim($string);

  //Clean multiple dashes or whitespaces
  $string = preg_replace("/[\s-]+/", " ", $string);

  //Convert whitespaces and underscore to dash
  $string = preg_replace("/[\s_]/", "-", $string);

  return $string;
}

//some artist now becomes some-artist, some song now becomes some-song

それから私にはルールがあります

RewriteRule ^mp3/(.*)-(.*)/?.html$ mp3.php?artist=$1&song=$2 [nc]

だから私は次のようなURLを持つことができます

www.example.com/mp3/some-artist-some-song.html

しかし、アーティストが曲から分離されている場所が混同されています。そのページでアーティストをエコーアウトすると、実際のアーティスト変数が「some-artist」のみの場合に「some-artist-some」が表示されます。そうでない場合、最初の変数が最後のダッシュの前のすべてであると考えていますが、どうすれば修正できますか?

4

2 に答える 2

2

あまりにも多くのことにダッシュを使用しているように思えます。

スペースの置き換えや境界区切りとして使用することはできませんが、 と の違いを見分けることは期待できませんsome-artist : some-songsome-artist-some : song

他のサイトでは、URL を分割してデータを取得することはありませんが、実際には some-artist-some-song の URL を使用して、 と のプロパティを持つ特定の 1 つのアイテムを表していartist: some artistますsong: some song

URL を分割する必要がある場合の答えは、スペースを置き換えるのではなく、アーティストと曲の間で別の文字を使用することです。実際には、各トラックに固有の URL 用にデータベースに追加の列を追加するまで、これは常に問題が発生します。

次に、mysqite.com/some-artist-some-song に対する要求が届き、URL 列の下のデータベースで some-artist-some-song を検索します。これにより、正しいトラックが得られます。URL が一意である限り、曲のタイトルとアーティストの組み合わせは関係ありません。

例えば。

+------------------+------------------+------------------------+
| artist           | title            | url                    |
+------------------+------------------+------------------------+
| Some Artist      | Some Song        | some-artist-some-song  |
| Some Artist Some | Song             | some-artist-some-song2 |
| Some             | Artist Some Song | some-artist-some-song3 |
+------------------+------------------+------------------------+

そのため、ユーザーが求めているアーティストや曲の組み合わせを一意に特定できるようになりました。

于 2013-05-16T10:43:05.320 に答える