Что касается SEO-поиска и html-символов

Я разрабатываю сайт, который позволяет пользователю выполнять поиск в базе данных сайта. Сценарий поиска настраивается, и это простой случай использования «сопоставления» в 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-строки.
  • Строки только с символами.
  • Строки типа «Заголовок ;)» и «Заголовок :-)»

Проблема в том, что он не работает с некоторыми символами, которые имеют «&» в преобразованной форме, например, знак ‹,>,& и т. д.

Что делает это неправильно? Пожалуйста, направляйте.


person CyberWizard    schedule 07.06.2014    source источник
comment
В URL-адресе есть символы, которые имеют определенное значение. Возможно, вы захотите изменить их для интерпретации вашей кодировкой, чтобы они не испортили ваш URL-адрес, когда вы вернете его.   -  person Fluffeh    schedule 07.06.2014
comment
@Fluffeh, не могли бы вы сказать, что я делаю неправильно ... или, по крайней мере, что я могу сделать, чтобы все это работало так, как я хочу. В основном, все, что я хочу, это ввести слово (с символами) и некоторые разрешенные символы. Поиск должен быть безопасным, без внедрения xss/sql (хотя я использую HTML Purifier+Prepared Statements). И, наконец, после безопасности я хочу, чтобы слаг URL был безопасным для SEO.   -  person CyberWizard    schedule 07.06.2014
comment
@CyberWizard: Все начинается с понимания вашей проблемы. Вы особенно ищете зарезервированные символы в URI. Поймите, как это работает, а затем решите, что вы хотите использовать. И не ведитесь на маркетинг: любой правильно написанный URI безопасен для SEO.   -  person hakre    schedule 07.06.2014


Ответы (1)


Что делает это неправильно?

Ваше ожидание.

Пожалуйста, направляйте.

http://tools.ietf.org/html/rfc3986 — хорошая запись в вашем случае возможно 2.2. Зарезервированные символы.

person hakre    schedule 07.06.2014
comment
+1 - то, что я сказал со ссылкой и конкретным указателем на часть (действительно чертовски) длинной спецификации, которая решает проблему. - person Fluffeh; 07.06.2014