有些奇怪的事情发生了,我的(php-mysql)网站正在运行,但我不知道它的可能性如何,我正在寻找解释。
我有一个数据库,其中包含商店列表,每个商店的名称中都可以包含è,à,ì,ò和ù等特殊字符。
这是我构建商店网页链接的方式,这样我可以在不带重音的情况下获得网址:
$noaccent_name = str_replace([" ","è","à","ù","ò","ì","'"],["-,"e","a","u","o","i","%27"], $shop_name);
echo '<a href="eng/kiwishop/' . strtolower($noaccent_name) . '">link</a>';
在.htaccess文件中,此链接由以下规则重写:
RewriteRule ^eng/kiwishop/([A-Za-z0-9\-\+\']+)$ kiwishop.php?shop=$1&lang=en [NC,L]
现在,kiwishop.php使用变量$ _GET ['shop']来检索数据库中有关该商店的所有数据。因此,我需要元音来“取回”它们的口音以匹配数据库中的名称。 这是我所做的:
$shop = htmlspecialchars($_GET['shop']);
$shop = str_replace(["'", "%27", "e", "a", "o", "u","i","-"], ["\'", "\'", "è", "à", "ò", "ù", "ì", " "], $shop);
$sql = "SELECT * FROM `{$lang_database}` INNER JOIN `Info` ON `shopid` = `Info`.`id` WHERE nome = '{$shop}'";
$result = query($sql, $connection);
它可以正常工作,但是后来我意识到这是一个大错误,因为所有元音都被带有重音符号的元音所代替。
例如,如果我在数据库中有一个$ shop_name =“ ArtCaffè”。在链接中,我有“ art-caffe”。但是我在查询中使用的$ shop变量是“àrtcàffè”,如果我转储变量$ sql,我会得到:
SELECT * FROM `Kiwishop` INNER JOIN `Info` ON `shopid` = `Info`.`id` WHERE nome = 'à rt cà ffè'
但是查询结果给了我我想要的东西,即与“ ArtCaffè”商店有关的所有数据。那怎么可能? 我不想更改代码,因为我很难使所有工作正常进行,但是我想了解原因,以便知道自己在做什么。
有人可以看到为什么会这样吗? 谢谢!