【问题标题】:Using - in URLS via mod_rewrite and querying Mysql database通过 mod_rewrite 在 URLS 中使用 - 并查询 Mysql 数据库
【发布时间】:2016-09-16 09:22:13
【问题描述】:

我有问题。我正在使用 mod_rewrite 重命名我的 URLS

一切正常,直到我重新格式化我的 URL,以便空格包含 - 而不是 %20。

site.com/page.php?country=abc&region=d e f&city=gh i

site.com/abc/d-e-f/gh-i/

目前我正在这样做

if (isset($_GET['country'])) {$country = str_replace('-', ' ', $_GET['country']);}
if (isset($_GET['city'])) {$city = str_replace('-', ' ', $_GET['city']);}
if (isset($_GET['region'])) {$region = str_replace('-', ' ', $_GET['region']);}

然后我在查询数据库时恢复正常,例如:

str_replace(' ', '-', $_GET['city'])

但是,这产生了一个问题,因为一些城市同时使用空格和 -。 圣安德烈留尼汪岛

最初我考虑运行原始 SQL 查询,如果返回 0 个结果,则在再次运行查询之前用 - 替换空格。然而,这只会在城市包含 ONLY - 和 0 空间时解决它,例如 Saint-andre

$sql2 = "SELECT `name`, FROM `list` WHERE country = '$regionCode[0]' AND admin1 = '$regionCode[1]' AND admin2 = '$regionCode[2]' AND city = '$city' ORDER BY 'moddate'";

处理此问题的最佳方法是什么?我应该改用双破折号并以不同的方式处理吗? EG Saint--andre-reunion-island 还是有更好的方法?

谢谢

【问题讨论】:

  • 通常,在 URL 中包含人类可读 slug 的网站包含整数 ID。在这种风格中,您完全忽略了服务器端的 slug,只根据 id 进行查询;这可以帮助您解决重复城市名称的任何问题。
  • 谢谢 Sam,是的,这是另一种选择,我希望避免使用 ID 字段

标签: php mysql .htaccess mod-rewrite


【解决方案1】:

决定使用双破折号选项并创建了一个函数。如果有更好的选择,我仍然欢迎任何其他建议:)

我在下面使用的代码。

   // URL Database conversion class
function QueryConversion($url) {
$url = str_replace('--', '*', $url);
$url = str_replace('-', ' ', $url);
$url = str_replace('*', '-', $url);
return $url; 
}

// URL conversion class
function URLconversion($url) {
$url = str_replace('-', '--', $url);
$url = str_replace(' ', '-', $url);
return $url;
}

if (isset($_GET['country'])) {$country = QueryConversion($_GET['country']);}
if (isset($_GET['region'])) {$region = QueryConversion($_GET['region']);}
if (isset($_GET['city'])) {$city = QueryConversion($_GET['city']);}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2010-10-28
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多