我正在开发一个网站,它允许用户通过网站数据库进行搜索,搜索脚本是自定义的,并且它是一个在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字符串。
- 只有字符的字符串。
- 字符串如“名称)”和“标题:-)”
的问题是,它不与某些字符具有“&”,在转换后的形式像<,>,&符号等工作
是什么让它错了? 请指导。
URL中的字符具有特定的含义。您可能需要修改这些代码,以便您的代码能够解读这些代码,以便在您恢复代码时不会遗漏您的网址。 – Fluffeh
@Fluffeh,你可以告诉我做错了什么......或者至少我该怎么做才能让这些东西按我的想法工作。基本上,我想要的只是用户输入一个词(带有字符)和一些符号。 搜索应该是安全的,没有xss/sql注入(尽管我使用的是HTML Purifier + Prepared Statements)。 最后在安全性之后,我希望URL slug能够安全地用于搜索引擎优化。 – CyberWizard
@CyberWizard:从理解“你的”问题开始。您特别在URI中查找*保留字符*。了解它是如何工作的,然后决定你想要使用它。不要被市场愚弄:任何正确书写的URI对于SEO来说都是安全的。 – hakre