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]

所以我可以有像这样的网址

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 来表示具有 和 属性的单个特定artist: some artist项目song: some song

如果您必须拆分网址,那么答案是在艺术家和歌曲之间使用不同的字符来替换空格。确实,除非您在数据库中为特定于每个曲目的 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 回答
1

尝试使用:

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

这样,您就可以拥有http://yourdomain.com/mp3/some-artist_some-song/. 我不确定这与some-artist/some-songSEO 术语相比如何。无论哪种方式,您都不能使用破折号来替换空格和作为分隔符。

于 2013-05-16T11:00:24.470 回答