2014-06-07 100 views
0

我正在开发一个网站,它允许用户通过网站数据库进行搜索,搜索脚本是自定义的,并且它是一个在SQL中使用“匹配”的简单情况。关于搜索引擎优化搜索和html字符

的工作流程:

用户输入的文本(其可以是文本+数+一些特殊符号)。 表单被提交到一个页面,该页面将生成一个SEO URL(http://www.example.com/search/URLENCODE(SEARCHTERM))。

现在我遇到的问题是一些字符显示为slu,,有些不是。我究竟做错了什么?

代码:

在搜索重定向页面:

$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); 

,然后选择ID,名称从表比赛(冠军)对抗( '$标题');

上述工程的罚款:

  • UTF字符串。
  • 只有字符的字符串。
  • 字符串如“名称)”和“标题:-)”

的问题是,它不与某些字符具有“&”,在转换后的形式像<,>,&符号等工作

是什么让它错了? 请指导。

+1

URL中的字符具有特定的含义。您可能需要修改这些代码,以便您的代码能够解读这些代码,以便在您恢复代码时不会遗漏您的网址。 – Fluffeh

+0

@Fluffeh,你可以告诉我做错了什么......或者至少我该怎么做才能让这些东西按我的想法工作。基本上,我想要的只是用户输入一个词(带有字符)和一些符号。 搜索应该是安全的,没有xss/sql注入(尽管我使用的是HTML Purifier + Prepared Statements)。 最后在安全性之后,我希望URL slug能够安全地用于搜索引擎优化。 – CyberWizard

+0

@Cyber​​Wizard:从理解“你的”问题开始。您特别在URI中查找*保留字符*。了解它是如何工作的,然后决定你想要使用它。不要被市场愚弄:任何正确书写的URI对于SEO来说都是安全的。 – hakre

回答