Я собираю данные формы, отправляя их скрипту проверки PHP через вызов AJAX. Проблема связана с специальными символами, скрипт проверки подлинности php работает не так, как ожидалось.Передача специальных символов на PHP через AJAX
HTML:
<input type="text" name="firstName" class="firstName"
placeholder="[first name]" required autofocus maxlength="25" size="25" />
JS:
$(".button").click(function() {
var firstName = encodeURIComponent($("input.firstName").val());
var datastring = "firstName=" + firstName;
$.ajax({
type: "POST",
url: "/scripts/validateSignup.php",
data: datastring,
cache: false,
success: function (errorMessage) {
//print to screen
}
});
});
PHP Validation
$postData = $_POST;
if (Filter::validateString($postData['firstName']) == false) {
echo "Oops! Some characters used in your first name are not valid.";
}
PHP Filter
//Returns true if string is good, false otherwise
public static function validateString($string) {
$string = trim($string);
if ($string == null || $string == "") {
return false;
} else {
if (preg_match("/[^\.\,\-\_\'\"\@\?\!\:\;\$\#\%\&\+\= a-zA-Z0-9()]/", $string) == true) {
return false;
} else {
return true;
}
}
}
На пустой строке он печатает ошибку на экран просто отлично. Но если я делаю что-то вроде ~ ~! @ # $%^& *() ", то он принимает строку как хорошую и не бросает и не ошибается, хотя результат preg_match == false.
[docs] (http://php.net/manual/en/function.preg-match.php): _preg_match() возвращает 1, если шаблон соответствует данному предмету, 0, если это не так, или FALSE, если возникла ошибка._ вы пытались сравнить значение '! = 0' вместо? – davidkonrad
@davidkonrad: полезно знать, но все же не ожидаемый результат. Я уверен, что validateString возвращает false, но условие if isn t acceptign it ... – TimNguyenBSM
Из документа pregmatch Эта функция может возвращать Boolean FALSE, но также может возвращать небулево значение, которое оценивает как FALSE. Пожалуйста, прочитайте раздел о Booleans для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции. Попробуйте использовать === вместо == –