PHP дефис проблемы при использовании переменной - PullRequest
0 голосов
/ 22 декабря 2010

Мой сайт - поисковая система.

В моем файле .htaccess у меня есть:

RewriteRule ^news/(.*)\.html$ /results/news.php?name=$1

И моя структура ссылок /news/what-is-up.html с использованием дефисов.

Когда я ищу / results / news.php? Name = hello world Я получаю результаты, отличные от тех, которые используются / news / hello-world.html

Похоже, что поиск ищет hello-world, используя вместо пробелов гипс, я мог бы легко решить это с помощью знака +, но я хочу использовать дефисы. Кто-нибудь знает, как это сделать?

Это код, который я использую для преобразования именной переменной в дружественный URL:

function toAscii($str, $replace=array(), $delimiter='-') {
if( !empty($replace) ) {
    $str = str_replace((array)$replace, ' ', $str);
}

$clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
$clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
$clean = strtolower(trim($clean, '-'));
$clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);

return $clean;
}

и моя поисковая система использует http-местоположение следующим образом:

if ($q != '') {
   header( 'Location: http://'.$_SERVER['SERVER_NAME'].'/news/'.toAscii($q).'.html' );
   die();
}
else
{
    header('Location:http://'.$_SERVER['SERVER_NAME'].'/news/');
    die();
}

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 декабря 2010

Вам нужно разбить слово на конце, так как оно переписывается.

То, что вы можете сделать, это иметь

RewriteRule ^ news /(.*). Html $ /results/news.php?name=$1&rewrite=true

и если присутствует $ _GET ['rewrite'], вы выполняете str_replace ("-", "", $ входящий)

0 голосов
/ 22 декабря 2010

Если я вас правильно понял, используйте str_replace, чтобы заменить дефис пробелом, прежде чем отправлять его на поиск.

$search_term = str_replace("-", " ", $incoming);
...