PHP делает ввод из веб-формы без учета регистра? - PullRequest
1 голос
/ 25 мая 2010

Итак, у меня есть некоторый код, который принимает пользовательский ввод из стандартной веб-формы:

if (get_magic_quotes_gpc()) {
    $searchsport = stripslashes($_POST['sport']);
    $sportarray = array(
        "Football" => "Fb01",
        "Cricket" => "ck32",
        "Tennis" => "Tn43",
    );
    if (isset($sportarray[$searchsport])) {
        header("Location: " . $sportarray[$searchsport] . ".html");
    die;
}

Как бы я изменил это (я думаю, что слово разбирается?), Чтобы сделать его чувствительным к регистру в ? Например, я набираю "fOoTbAlL" и PHP направит меня в Fb01.html в обычном режиме.

Обратите внимание, что код является лишь примером. Введенная пользователем строка может содержать более одного слова, скажем «Crazy AWesOme HarpOOn-Fishing», и все равно будет работать, если элемент массива «Crazy Awesome Harpoon-Fishing» (обратите внимание на заглавную букву F перед чертой ).

Ответы [ 5 ]

2 голосов
/ 25 мая 2010

Вы можете изменить свой код следующим образом:

// Searches for values in case-insensitive manner
function in_arrayi($needle, $haystack) {
    return in_array(strtolower($needle), array_map('strtolower', $haystack));
}

$searchsport = $_POST['sport'];
$sportarray = array(
    "Football" => "Fb01",
    "Cricket" => "ck32",
    "Tennis" => "Tn43",
);

if(in_arrayi($searchsport, $sportarray)){
    header("Location: " . $sportarray[$searchsport] . ".html");
    die;
}
2 голосов
/ 25 мая 2010

Самый простой способ - использовать strtolower , чтобы сделать все в нижнем регистре для сравнения.

2 голосов
/ 25 мая 2010

Я бы использовал строковую функцию, strtolower().

1 голос
/ 25 мая 2010
$searchsport = strtolower($_POST['sport']);
$sportarray = array(
    "football" => "Fb01",
    "cricket" => "ck32",
    "tennis" => "Tn43",
);
if (isset($sportarray[$searchsport])){
    header("Location: " . $sportarray[$searchsport] . ".html");
    die;
}

Таким образом, строка поиска и ключи массива являются строчными, и вы можете выполнять сравнение без учета регистра.

Если вы хотите сохранить регистр клавиш $sportarray, вы можете сделать:

$searchsport = ucfirst(strtolower($_POST['sport']));
$sportarray = array(
    "Football" => "Fb01",
    "Cricket" => "ck32",
    "Tennis" => "Tn43",
);
if (isset($sportarray[$searchsport])){
    header("Location: " . $sportarray[$searchsport] . ".html");
    die;
}
0 голосов
/ 25 мая 2010

<code><?php
$searchsport = $_POST['sport'];
$sportarray = array(
"Football" => "Fb01",
"Cricket" => "ck32",
"Tennis" => "Tn43",
);
if(isset($sportarray[ucfirst(strtolower($searchsport]))])){
    header("Location: ".$sportarray[$searchsport].".html");
    die;
}
?>

уведомление ucfirst(strtolower($searchsport]))?

LE: добавлено ucfirst

...