用连字符替换空格用于url,然后删除用于查询的连字符(除非它们以...开头)

时间:2014-08-08 21:40:31

标签: php mod-rewrite

所以我有一些代码可以从'产品中提取数据。我的数据库中的表,并显示如下:

while ($row = mysqli_fetch_assoc($result)) {
    $group[ $row['companyname'] ][] = $row;
}
foreach ($group as $company_name => $products) {
    echo "$company_name";
        foreach ($products as $product) {
            echo "<a href='/products/$product[id]/$product[companyname]/$product[itemname]'>";
                echo "<img src='$image_dir_url'>";
            echo '</a>';
        }
}

为了使这个链接有效,我有一个改写:

RewriteRule ^products/(.*)/(.*)/(.*)$ /products/index.php?id=$1&company=$2&itemname=$3 [L]

然后在代码中

if (isset($_GET['id']) && isset($_GET['company']) && isset($_GET['itemname'])) {
    display that items data
}

这很有用,并且给了我这样的网址:

www.mysite.com/products/5311/company name / item name

而不是

www.mysite.com/products/index.php?id=5311&company=company name&amp; itemname = item name

然而,这就是我的问题,我还需要在url的任何空格中添加破折号,使它看起来像这样:

www.mysite.com/products/5311/company-name/item-name

我以为我已经解决了这个问题,而且我对自己真的很满意(我在这方面很新手):

我简单地补充道:

$company = str_replace(' ', '-', $product['companyname']);
$item = str_replace(' ', '-', $product['itemname']);

并使用这些变量生成链接。

然后使用相反的方法来修复它们以备数据库查询:

str_replace('-', ' ', $company);

现在,正如我所说的那样,我认为这非常好,而且一切正常......

直到我意识到我的某些公司和产品在其名称中以连字符开头

因此,将连字符添加到有空格的公司/产品中的所有空格,但是当我删除查询的所有连字符时,公司/产品 连字符最初丢失了!因此,我的查询不再检索它们。

Craaaap。

有没有办法解决这个问题,或者我应该在我的产品数据库中创建一个名为rewrite_url的新字段,并将其用于我的链接并在我的数据库中检查该字段以查找该项目?任何建议都会受到赞赏,我几乎没有 昨晚睡觉,因为这在我的脑海中流传。

0 个答案:

没有答案