|
|
|
| Добрый день!!! Подскажите как удалить пробелы в поисковом запросе при вводе вначале и в конце строки. Поиск ведется по числам игнорируя все символы и пробелы, но при случайном вводе пробела вначале строки или в конце или при вводе двойного пробела поиск не работает (выводится все). Вот кусок кода, который используется:
$number = preg_replace('/\D/', '', $keyword);
if (strlen($number) > 2) {
$sql .= " OR p.model LIKE '" . $number . "%')";
} else {
$sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%')";
}
|
здесь идет запрос по номеру если цифр больше 2-х, если нет, то по наименованию. Здесь все работает, но вот с пробелами никак не решу. Причем одинарные пробелы в середине строки успешно игнорируются, а в начале и в конце или двойные пробелы нет. | |
|
|
|
|
|
|
|
для: rider76
(13.07.2011 в 07:54)
| | trim() | |
|
|
|
|
|
|
|
для: elenaki
(13.07.2011 в 09:35)
| | chop()
Функции лучше запомнилась)) | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(13.07.2011 в 10:10)
| | Не подскажете как применить к моему примеру? | |
|
|
|
|
|
|
|
для: elenaki
(13.07.2011 в 09:35)
| | trim пробовал, не работает. Я вот в таком виде его вставлял, подскажите может неправильно ? С PHP не очень дружу:
$number = trim(preg_replace('/\D/', '', $keyword));
|
еще пробовал вот в таком виде, тоже никакого результата
$number = preg_replace('/\D|\s/', '', $keyword);
|
| |
|
|
|
|
|
|
|
для: elenaki
(13.07.2011 в 09:35)
| | Добрый день!!! Не подскажете как переделать эту функцию путем перечисления символов, которые надо проигнорировать( точки тире пробелы) | |
|
|
|
|
|
|
|
для: rider76
(14.07.2011 в 13:45)
| | Добавьте их во второй параметр функции. | |
|
|
|
|
|
|
|
для: cheops
(14.07.2011 в 14:01)
| | Прошу прощения. Подскажите что вы называете вторым параметром функции
эта строка ?
| |
|
|
|
|
|
|
|
для: rider76
(14.07.2011 в 20:12)
| | Дело в том, что ваш пост был ответом на пост elenaki, которая предложила удалить пробелы, при помощи функции trim(), эта функция удаляет пробелы из начала и конца строки, чтобы она удаляла какие-то другие символы, их нужно перечислить во втором параметре
| |
|
|
|
|
|
|
|
для: cheops
(14.07.2011 в 20:15)
| | Понял спасибо, буду пробовать | |
|
|
|
|
|
|
|
для: cheops
(14.07.2011 в 20:15)
| | не работает у меня trim почему-то, уже все варианты перебрал | |
|
|
|
|
|
|
|
для: rider76
(14.07.2011 в 23:43)
| | Следующий скрипт у вас какую строку выводит (посмотрите через просмотр HTML-кода, чтобы и пробелы не пропали)?
<?php
$str = " Hello .-";
$str = trim($str, " .-");
echo $str;
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(14.07.2011 в 23:45)
| | Hello выводит и вот код:
<html>
<head>
<title></title>
</head>
<body>
Hello
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: cheops
(14.07.2011 в 23:45)
| | Пробелы удаляются, нашел еще вот такой скрипт для теста
<?
$str = " Hello, world! ";
$str1 = trim(" Hello, world! ");
$str_len = strlen($str);
$str1_len = strlen($str1);
echo(" размер исходной строки '$str' = $str_len, <br>
размер строки после удаления пробелов = $str1_len");
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(14.07.2011 в 20:15)
| | Сам trim у меня вообще не работает в моем коде, дело в том что идет запрос на поиск в $keyword только номеров, когда запрос прошел уже поздно удалять пробелы, надо как то использовать trim перед запросом $keyword в только что введенном тексте | |
|
|
|
|
|
|
|
для: rider76
(18.07.2011 в 13:49)
| | Хм... ну вы вероятно разбиваете запрос на отдельные слова, к которым нужно применить trim()? Если не сложно опишите проблему подробнее, желательно, с примером. | |
|
|
|
|
|
|
|
для: cheops
(18.07.2011 в 14:02)
| | Заранее спасибо за участие. Прежде всего скажу , что это CMS opencart (интернет магазин). Там модуль поиска организован по названию и по модели (артикулу), но ищет только точно так как записано в адмике. Я для себя решил артикул заводить без всяких знаков препинания и пробелов, а с помощью регулярных выражений можно игнорировать эти все знаки. Но вот проблема, игнорировать можно только внутри самого слова. Так как здесь запрос SQL идет в $keyword (поиск), схема работы trim
$str= " что то написано ";
$str=trim( " что то написано ");
|
не действует, сам trim как я понимаю работает, но так как в базе SQL нет пробелов , то ему соответственно нечего и удалять. Получается такая штука; строка $str запрашивает в $keyword, а строка $str=trim удаляет пробелы в строке $str , в которой к этому моменту уже просто ничего нет. Кусок кода с запросом приведен выше, полностью файл прикреплю вечером, сейчас нет под рукой. Извините если намудрил с описанием, старался как мог. Надо попытаться как-то написать код так, что-бы исправлялось все еще до SQL запроса. Посетитель набрал номер артикула в поиск, и при нажатии кнопки сначала исправлялась его запись, а потом уже шел запрос в $keyword (по базе данных).
Пробовал так делать, не получилось
$number = preg_replace('/\D/', '', $keyword);
$number=trim($number);
|
| |
|
|
|
|
|
|
|
для: rider76
(18.07.2011 в 16:58)
| | У нас есть в строке, три слова "что", "то" и "написано", если вы их получите в виде массива, это вам поможет? Или в базе данных тоже строка из нескольких строк? Если да, то можно увидеть что примерно в базе данных?
$str= trim(" что то написано ");
// Разбиваем строку на отдельные слова
$arr = preg_split("|[\s]+|", $str);
|
| |
|
|
|
|
 30.3 Кб |
|
|
для: cheops
(18.07.2011 в 17:46)
| | В базе данных строка в виде массива "чтотонаписано", именно эта строка должна находиться. Артиклы в виде буквенно-цифровых обозначений. В начале делал поиск только по цифрам, но буквы тоже нужны. По поводу пробелов мне вот что подсказали, что там только что написанный пользователем текст получен из $_GET, поэтому там вместо пробела %20 - не представляю что это такое. Попробовал подставить на удаление "%20", удаляет именно текст %20, но не пробелы. Просветите в каком направлении двигаться? Файл с поиском прикрепил. Я меняю строку 188 и 259. Сейчас правда они вот так выглядят
$model = str_replace(array('_', '-', '—', '.', ',', ' ', '+', '/'), '', $keyword);
|
| |
|
|
|
|
|
|
|
для: rider76
(18.07.2011 в 20:49)
| | Все спасибо за участие. Разобрался. Проблема была не в регулярных выражениях ( trim работает как ему и положено). Проблема была в самом скрипте поиска. Поиск кроме названия описания и артикла ищет еще и по тегам, а так как они пустые везде скрипт и выводил все товары при наличии пробела в конце и начале. Еще раз всем спасибо. | |
|
|
|