Php 显示URL是否与数据库字符匹配

Php 显示URL是否与数据库字符匹配,php,mysql,Php,Mysql,首先让我给你们一点背景知识来解释我想做什么。我的网站使用的URL是这样的:MySite/World/istrhmus\u of theu Panama 我正在进行一次大的升级(最终可能会升级到CMS,比如Drupal或WordPress),听起来大家普遍认为带连字符的URL比带下划线的要好。所以我将我的URL改为MySite/World/Disthmus of Panama。同时,我也在试图弄清楚我是否应该把我的URL改成全小写,还有一些特殊的符号,比如重音符号或括号呢 如果有人输入了一个类似于

首先让我给你们一点背景知识来解释我想做什么。我的网站使用的URL是这样的:MySite/World/istrhmus\u of theu Panama

我正在进行一次大的升级(最终可能会升级到CMS,比如Drupal或WordPress),听起来大家普遍认为带连字符的URL比带下划线的要好。所以我将我的URL改为MySite/World/Disthmus of Panama。同时,我也在试图弄清楚我是否应该把我的URL改成全小写,还有一些特殊的符号,比如重音符号或括号呢

如果有人输入了一个类似于MySite/World/Disthmus of Panama的URL怎么办?维基百科有一个脚本,可以自动将空格转换为下划线。如果您使用了错误的大小写,它也将默认为正确的URL

当然,如果我更改我的URL,我还必须转发来自旧URL的访问者。它变得非常混乱

然后我意识到,我可以用一个脚本来覆盖所有基础,该脚本接受与数据库中的字符匹配的任何URL,1)不考虑大小写,2)也不考虑多个单词是否由连字符、下划线、空格或%20分隔。想象一下下面的URL:

MySite/World/Isthmus-of-Panama
MySite/World/Isthmus of Panama
MySite/World/Isthums%20of%20Panama
MySite/World/isthumus_of_panama
MySite/World/Isthmus-of_PANAMA
其中数据库值为巴拿马地峡

下面是我的一个查询,$MyURL=数据库值URL(例如巴拿马地峡)。有谁能告诉我如何修改它,以便接受上面所有的URL,然后页面默认为数据库值

维基百科也有类似的功能。如果你转到他们关于疯狂马的文章,然后将URL疯狂马替换为疯狂马或疯狂马,它将默认为疯狂马。谢谢



我会将输入(例如Isthums%20of%20Panama)转换为php中的数据库值。 如果转换后的值等于输入值,则不使用转换后的文本执行301重定向到url,否则执行301重定向

编辑

我将在数据库中创建一个列slug(通常这样称),其中包含规范化的文本(ascii字符和-),并在其上创建一个唯一的索引
您可以使用此函数在php中生成slug:

我想我理解您的意思;如果字符和空格/连字符/等与数据库值完全匹配,则只需显示页面即可。如果字符匹配-除了大小写或连字符与下划线与空格之间的差异-则将访问者重定向到正确的URL。但是有人能推荐一个脚本来实现这一点吗?一个脚本说“所有字符都匹配数据库值,我不在乎多个单词之间是否有-、u或(空格)”?
$sql= "SELECT COUNT(URL) AS num FROM gs_reference
WHERE URL = :MyURL";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':MyURL',$MyURL,PDO::PARAM_STR);
$stmt->execute();
$Total = $stmt->fetch();


switch($Total['num'])
{
 case 1:
 // DISPLAY A PAGE
 break;
 case 0:
 // 404 NOT FOUND ERROR
 break;
 default:
 // DUPLICATE RESULTS
 break;
}