【问题标题】:Constructing URL without item ID and getting right item构建没有项目 ID 的 URL 并获得正确的项目
【发布时间】:2011-10-22 16:57:17
【问题描述】:

这个问题我有一段时间了,

假设我们有一个电影网站

我们在数据库中有一部名为 Test-movies123! 的电影,

现在我要做的是创建一个 URL watch/test-movie123-{$id}/,然后使用 ID 查询 DB,

现在的问题是 ID 不应该存在,我该如何解决这个问题? 如果我从 url 获取 test-movie123 并搜索它,我不会找到它,因为它没有 ! 除非我使用 LIKE 但那不是很可靠...

任何人都可以提出任何建议吗?将不胜感激

【问题讨论】:

    标签: php mysql .htaccess url


    【解决方案1】:

    好吧,您可以创建一个规则来获取电影标题并将其变成 slug。因此,您会知道您总是将标题小写,删除除字母、数字和破折号以外的任何内容,并将空格转换为单个破折号。

    然后将其存储在数据库的另一列中,并确保您强制唯一性。获取 URL 并从中搜索该列。

    从那时起,您只需要处理如果您上传的第二个视频会产生完全相同的 slug 会发生什么。有很多选项......附加一个随机数slug,增加一个数字并附加它,等等。

    【讨论】:

    • 我明白了,谢谢,有什么想法或 php 代码示例可以用来正确剥离它吗?
    • $slug = preg_replace('/\s+/', '-',preg_replace('/[^A-Za-z0-9\s]/', '', strtolower($original)));
    • 我使用$original = 'Test My Movie-123!'; 测试了上述内容,并将其转换为“test-my-move123”。很抱歉一起运行它;我的测试用例将 mods 分成三行,但由于我们不能在 cmets 中放置换行符,所以我将其格式化为如上。
    【解决方案2】:

    为此,您的数据库中可能有类似 primary_key 的内容 “test-movies123”。

    假设您有一个控制面板,您在表单中插入电影。 然后使用标题Test Movies123!像这个例子一样将它保存在数据库中:

    id:AUTO_INCREMENT NUMBER keyname: sanityTitle("Test Movies123!") 这应该保存 "test-movies123" 标题:“测试电影123!” 东西:“blablabla”

    注意 sanityTitle() 将是您从标题中准备友好 url 的函数。

    然后你的网址看起来像 watch/test-movie123/ 在 url 中使用正则表达式控制 要么 watch/?id=test-movie123 raw

    您将在表中搜索 INDEXED 或 PRIMARY 键“keyname”,它将输出 1 行,包含您的所有内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 2016-01-04
      • 2019-11-23
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      相关资源
      最近更新 更多