在URL中通过mod_rewrite使用 - 并查询Mysql数据库

时间:2016-09-16 09:22:13

标签: php mysql .htaccess mod-rewrite

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

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

let Parent = (function() {
  class Parent {
    constructor() {
      console.log('P constructor');
      initParent.call(this);
    }
  }

  function initParent() {
    console.log("initParent");
    this.parentProp = 'parent';
  }

  return Parent;
})();

let Child = (function() {
  class Child extends Parent {
    constructor() {
      console.log('C constructor');
      super();
      initChild.call(this);
    }

    test() {
      console.log(this.childProp + ' ' + this.parentProp);
    }
  }

  function initChild() {
    console.log("initChild");
    this.childProp = 'child';
  }

  return Child;

})();

let child = new Child();
child.test();

目前我正在这样做

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']);}

然而,这造成了一个问题,因为一些城市同时使用空格和 - 。 圣安德烈团圆岛

最初我考虑过运行原始SQL查询,如果返回0结果,则在再次运行查询之前str_repla空格 - 。但是,如果城市仅包含 - 并且0空格,例如圣安德烈,这只能解决此问题。

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

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

由于

1 个答案:

答案 0 :(得分: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']);}