Mod_rewrite返回url中的空格


Mod_rewrite returning spaces in url

大家好,我的一个网站有问题。今天我决定把我所有的url都改成更美观的。我现在的问题是如何摆脱空间。这是链接现在的样子"http://website.com/repair/iphone%205s"

这里是。htaccess

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^([a-z]+)'/?$ $1.php [NC,L]
RewriteRule ^smartphone/([a-z]+)/?$ devices.php?d=$1 [L]
RewriteRule ^tablet/([a-z]+)/?$ tablet.php?d=$1 [L]
RewriteRule ^repair/([0-9a-zA-Z_'s]+)/?$ repair.php?m=$1 [L]
RewriteRule ^repair/tablet/([0-9a-zA-Z_'s]+)/?$ repairtablet.php?m=$1 [L]
RewriteRule ^repair/ipod/([0-9a-zA-Z_'s]+)/?$ repairipod.php?m=$1 [L]
</IfModule>

url是使用我在数据库中拥有的每个电话的型号名称构建的,它们包含空格,因此例如iPhone 5s将具有"repair/iPhone %205s"的url。这里是我的php代码,我使用_GET语句返回该特定型号的所有维修。

<?php
        $model = mysqli_escape_string($con, $_GET['m']);
        $modelName = mysqli_query($con,"SELECT
        d.id AS 'DeviceID',
        d.model AS 'Model',
        r.id AS 'RepairID',
        r.repair AS 'Repair',
        r.price AS 'Price',
        r.desc AS 'Desc',
        r.active AS 'Active',
        r.img AS 'IMG'
        FROM `tablets` AS d
        LEFT JOIN `tabletrepair` AS r ON
        (d.`id` = r.`pid`)
        WHERE d.`model` =  '$model'
        AND r.`active` = 1 
        ");
    while($row = mysqli_fetch_array($modelName))
    {
          echo $row[Model];
              echo $row[Desc];
              echo $row[Price];
              echo $row[IMG];

    }
    ?>

我想把"http://website.com/repair/iphone%205s"替换为"http://website.com/repair/iphone_5s"

非常感谢。

当您创建WHERE子句时,基于$_GET['m']值,您可以使用str_replace用下划线替换所有空格,此外(我不确定是否有必要)您应该解码url(它$_GET['m']包含%20而不是' ')。也不要记得mysql escape或切换到PDO,或其他高级数据库操作库。

$model = str_replace(" ","_",rawurldecode($_GET['m']));
引用

  1. http://www.php.net/manual/en/function.rawurldecode.php
  2. http://pl1.php.net/manual/en/function.str-replace.php