2012-09-28 2 views
-1

У меня есть странная проблема с моим сайтом, у меня есть сценарий, который записывает все поисковые запросы и вставляет эти слова поиска в базу данных, проблема в том, что, поскольку роботы поисковых систем начали красться вокруг моего сайта, они делают мой сценарий для создания ключевых слов поиска, таких как «ключевые слова поиска //////////////////////////////////////// //////// " Я хочу разбить эти символы (//////////) перед индексированием на mysql.полоса определенного символа из строки

Это то, что я есть:

$search=htmlspecialchars($_GET['load']); 
$say=mysql_query("SELECT * FROM madvideo WHERE MATCH (baslik) AGAINST ('*$search*' IN BOOLEAN MODE)"); 
$saydim=mysql_num_rows($say); 
$count = $saydim; 
$page = !empty($_GET["page"]) ? intval($_GET["page"]) : 1; 
$s = ($page-1)*$perpage; 
$sayfasayisi=ceil($count/$perpage); 
if(ayaral("Arananlar-Kaydet")=="1") { 
$ekle=cevir($search); 
@mysql_query("insert into tag (baslik,tr,tarih) values ('$search','$ekle',now()) "); } 

переменная «$ поиск» будем называть слово для поиска, и я не знаю, Что синтаксис полосы я должен использовать, чтобы лишить эту неприятную ///// //// персонаж.

EDIT: код, который создает слова это:

$vtitle = str_replace("\r\n\r\n", ' ', $vtitle); 

$words = explode(' ', $vtitle); 

$k = count($words); 
$k3 = ceil($k/3); 

$new = array(); 
for ($i=0; $i<$k; $i+=$k3) { 
    $new[] = join(' ', array_slice($words,$i, $k3)); 
} 
$tag1 = $new[0]; 
$tag2 = $new[1]; 
$tag3 = $new[2]; 
+2

Пожалуйста, не используйте функции 'mysql_ *' больше, они устарели. Оформить заказ 'PDO' или' mysqli_' и использовать подготовленные операторы. Между тем 'str_replace ('/', '', $ stirng);' должен работать –

+0

Использовать почтовые формы, а не получать формы. В противном случае вы просите о таких проблемах самостоятельно, похоже, что вы повторно связали поиск и ошиблись с этим. Также, что вы пробовали до сих пор, вы только дали описание своей проблемы. – hakre

ответ

1

Использование MySQL TRIM функция для удаления из конца строки следующим образом:

TRIM(TRAILING '/' FROM <string>) 

@mysql_query("insert into tag (baslik,tr,tarih) 
values (TRIM(TRAILING '/' FROM '$search'),'$ekle',now())") 

Для обрезки с обоих начала и окончания, использование следующих

TRIM(BOTH '/' FROM <string>) 

@mysql_query("insert into tag (baslik,tr,tarih) 
values (TRIM(BOTH '/' FROM '$search'),'$ekle',now())") 

Для удаления всех вхождений использование строки REPLACE функционирует следующим образом:

REPLACE(<string>, '/', '') 

@mysql_query("insert into tag (baslik,tr,tarih) 
values (REPLACE('$search', '/',''),'$ekle',now())") 

Надеется, что это помогает ...

+0

Спасибо shubhansh, который работал для /// в конце текста, но i заметил, что эта проблема также возникает в тексте, который имеет /// -символы вроде: word /'s ////. Как я могу удалить все символы ////? С уважением –

+0

Я отредактировал свой ответ, проверьте это ... – Shubhansh

+0

Я тестировал ///// слово и символы остались. Это действительно странно, я не могу понять, почему эти //// создаются, когда боты попадают на страницу. Я выложу свой сценарий, который создаст эти слова. Спасибо –

0
$regex = "/\//"; 
$string = "////search"; 
$string = preg_replace($regex, '', $string); 

echo $string; 
1

EDIT:

Реальный пример ...

<?php 

if(isset($_REQUEST['str'])) { 

    $search = $_REQUEST['str']; 

    $ser_chk = strpos($search, "/"); 
    if ($ser_chk > -1) { 
    $search = str_replace("/", "", $search); 
    } 

} 

?> 

<h1><?php print $search; ?></h1> 

<form action="" method="post"> 

<input type="text" size="100" value="search keywords////////////////////////////////////////////////" name="str" /> 
<input type="submit" /> 

</form> 

ССЫЛКА НА ТЕСТ: http://simplestudio.rs/tsto.php

По меньшей мере do:

$search = mysql_real_escape_string($search); 

Также вы можете проверить эти символы и, если они были основаны, просто заменить их пустой строкой.

$ser_chk = strpos($search, "/"); 
if ($ser_chk > -1) { 
$search = str_replace("/", "", $search); 
} 
+0

Я протестировал его, но не могу заставить его работать.Спасибо Dusan –

+0

Что именно вы проверили? – Develoger

+0

Ну, я проверил весь ваш код, так как переменные одинаковы с использованием. но символы /// все еще не удаляются: S –

1

Если / символов всегда появляются в конце $search, вы можете использовать rtrim используя второй (необязательный) параметр:

$search = "search keywords////////////////////////////////////////////////"; 
$search = rtrim($search, '/ '); 
echo $search; // prints 'search keywords' 
+0

Они появляются в конце, а когда текст имеет символ. т.е.: word/s. Спасибо Carlos –

0

Гибким решение для персонажа повторение будет регулярным выражением.

$output = preg_replace('/\/[\/]+/', '/'. $input); 

Он будет обрабатывать любое количество «/» и заменять его одним «/».

+0

Мне нужно удалить все /, потому что в текущей среде его не суждено было иметь это. Я ценю ваше время –