Я разрабатываю сайт, который позволяет пользователю выполнять поиск в базе данных сайта. Сценарий поиска настраивается, и это простой случай использования «сопоставления» в SQL.
рабочий процесс такой:
Пользователь вводит текст (который может быть текст+цифра+некоторые специальные символы). форма отправляется на страницу, которая генерирует SEO-URL ( http://www.example.com/search/URLENCODE%28SEARCHTERM%29).
Теперь у меня проблема в том, что некоторые символы отображаются в слаге, а некоторые нет. Что я делаю не так?
Код :
На странице перенаправления поиска:
$title=rawurldecode($_GET['searchtext']);
$title=ucfirst(mb_strtolower($title,'UTF-8'));
$title=preg_replace('/[^-\pL.\s0-9- ?\'"+:()<>&]/u', '', $title); //replaces everything else apart from characters and symbols mentioned above.
$title=htmlspecialchars(trim(html_entity_decode($title)));
$slug=rawurlencode($title);
$link="http://www.example.com/search/".$slug;
и на странице поиска это как:
$title=rawurldecode($_GET['searchtext']);
$title=preg_replace('/[^-\pL.\s0-9- ?\'"+:()<>&;]/u', '', $title);
$title=str_replace("%09","",$title);
$title=str_replace("%20"," ",$title);
$title=str_replace("-"," ",$title);
$title=trim($title,' ');
$title=trim($title,'%20');
$title=trim($title,'-');
$title=trim($title,' ');
$title=html_entity_decode($title);
а затем SELECT id,Title из таблицы match(title) против ('$title');
Вышеупомянутое отлично работает для:
- UTF-строки.
- Строки только с символами.
- Строки типа «Заголовок ;)» и «Заголовок :-)»
Проблема в том, что он не работает с некоторыми символами, которые имеют «&» в преобразованной форме, например, знак ‹,>,& и т. д.
Что делает это неправильно? Пожалуйста, направляйте.