2013-03-02 4 views
0

Я столкнулся с этой странной ситуацией с регулярным выражением. Я хочу проверить, если первый ID установлен, если нет, то перенаправление на index.php

это index.php

$title = "This is a title"; 
$id = "5"; 
$queryc = $db->prepare("SELECT * FROM categories WHERE id = :id"); 
$queryc->bindParam(':id', $id, PDO::PARAM_INT); 
$queryc->execute(); 

/*** fetch the results ***/ 
$resultc = $queryc->fetchAll(); 
$count = count($resultc); 
if ($count > 0) 
{ 
foreach($resultc as $rowc) 

    { 
    $cat_name = htmlentities($rowc['cat_name'], ENT_QUOTES, 'utf-8'); 
    $cat_name = stripslashes($cat_name); 

    } 
}else { 
//redirect is a function 
redirect("index.php"); 
} 
echo " 
<td width='57%' height='126' class='bord' ><a href='$cat_name-$id.htm' 

class='title_style'>" . $title . "</a><br>"; 

$cat_name может иметь два слова, разделенные пробелом или это может быть акцентировано символов тоже за исключением некоторых символы. Для этого я использовал .htaccess

Options +FollowSymlinks 
    RewriteEngine on 
    RewriteRule ^([^[email protected]#$%^&*(){}]+)-(\d+)\.htm$ file.php?id=$2 [L] 

В file.php где результат показывает, что я хотел, чтобы убедиться, что $ ID установлен

if(isset($_GET['id'])) 
{ 

$id = (int) $_GET['id']; 

    if($id == 0) 
    { 
     redirect("index.php"); 
     exit; 
    } 

} 
else 
{ 
redirect("index.php"); 
    exit; 
} 

В браузере это будет выглядеть следующим образом : mydomain.com/auto аукцион-5.htm

Моя проблема: $cat_name = auto auction; (обратите внимание на пробел) он не работает, но если $cat_name = autoauction; без пробелов он работает.

Как заставить его работать, когда есть места?

+0

Что вы подразумеваете под словом "not set"? вы имеете в виду, что переданная строка будет «category name» или «category name-0»? Зачем вам нужно использовать PHP? не можете ли вы просто использовать регулярное выражение, которое вы уже используете в вашем файле .htaccess, чтобы определить, есть ли эта цифра? – dcasadevall

+0

позволяет сказать $ id = 5, url будет mydomain.com/auto auction-5.htm, и если я запустил этот mydomain.com/auto auction-2045.htm, я хочу, чтобы он перенаправлял index.php с 2045 года. t существует. – Rocks

ответ

0

Ваш запрос имеет специальный символ (пробел), который заставит браузер сначала закодировать ваш запрос, а затем отправить его. Чтобы преодолеть эту ситуацию, вы должны сначала ее декодировать с помощью urldecode.