我正在做一个小项目,但我已经脑死了,所以我希望这里有人可以帮助我克服我的编码障碍。
我正在尝试使用 php 创建一个页面,该页面根据传递给页面(位置)的值(如果有)来更改其内容显示。我创建了一个存储不同位置的安全列表数组。首先,我检查针对安全列表传递的任何值,如果匹配,我将显示一组内容。
如果不匹配,我正在运行相似性测试以检查是否存在简单的错字,并且仍然可以将人们导航到我认为他们想要的页面,但这就是我卡住的地方。
我希望有人可以打字
www.example.co.uk/location.php <---- 加载通用位置页面
www.example.co.uk/location.php?loc=Bishops-Stortford <---- 加载目标位置页面
www.example.co.uk/location.php?loc=Bishop-Stortford <---- 加载目标位置页面,尽管拼写错误提供了 90% 或更多的匹配
www.example.co.uk/location.php?loc=?php echo "I hacked your site"; ?> ---- 希望我的系统能够解除讨厌的代码注入
我将在下面发布我的代码,以便您可以看到我所拥有的。
<?php
$loc = "";
$safelist = array("Bishops Stortford", "Braintree", "Chelmsford", "Dunmow", "Harlow", "Hertford", "Saffron Walden", "Sawbridgeworth", "Stansted", "Ware",
"Essex", "Hertfordshire");
if(isset($_GET["loc"])) {
/* Gets the value of loc if set, replaces hyphens with spaces and capitalises first letters of words converting the rest to lowercase. */
$loc = ucwords(strtolower(str_replace("-", " ", $_GET["loc"])));
}
/* Is word in safelist */
if (in_array($loc, $safelist)) {
/* Yes */
if (($loc == "Essex") or ($loc == "Hertfordshire")) {
$county = True;
} else {
$county = False;
}
if ($county == False) {
echo "\"" . $loc . "\" is not a county";
}else{
echo "\"" . $loc . "\" is a county";
}
} else {
/* No, Is string 90% similar to any entry within the safelist? */
foreach ($safelist as $safeword) {
similar_text($safeword, $loc, $percent);
echo $safeword . " " . $loc . " " . $percent . "<br />";
if ($percent >= 90) {
}
}
?>
我想不出 if ($percent >=90) 该怎么办。我知道我想退出循环并从我找到的第一个 90% 或更多匹配中获取结果,但我不是 100% 确定如何执行此操作。
还有什么是处理代码注入的最佳方法,例如www.example.co.uk/location.php?loc=?php echo "I hacked your site"; ?>