2017-01-14 2 views
0

Я стараюсь, чтобы мой регистрационный скрипт принимал только буквы и æøå, но я ничего не пробовал до сих пор. Он все равно не примет æøå.PHP preg_match не разрешает æøå

Это мой код до сих пор

if ($_POST['first'] != "" && preg_match("%^[-a-zA-Z æøå\/]+$%", $_POST['first']) == true && strlen($_POST['first']) > 0) { 
    $input_first = mysqli_real_escape_string($con,$_POST['first']); } 
else { header("Location: ../register.php?n=2"); exit; die(); } 

Что я делаю неправильно?

+0

Работы здесь, https://eval.in/716341. Выпускаете ли «æøå» на сервер в качестве этих символов? Вам не нужны все эти проверки. Из-за '+' в регулярном выражении вы знаете, что есть значение, поэтому оно не будет пустым и длина будет> 1. – chris85

+0

Если ваш шаблон и ваша строка кодируются в кодировке UTF-8, вам необходимо установить [ 'u' modifier] (http://php.net/manual/en/reference.pcre.pattern.modifiers.php). Обратите внимание, что ваши тесты являются избыточными. '! =" "И' strlen> 0' совпадают, и ваше регулярное выражение запрещает пустое значение из-за вашего '+' квантификатора. – julp

ответ

0

Если ваш файл PHP уже закодирован в кодировке UTF-8, вы должны сообщить своей базе данных, что вам нужен UTF-8. Вместо того, чтобы возиться с конфигурациями MySQL, просто сообщите свой объект соединения, какой набор символов вы ожидаете, база данных сделает для вас все остальное.

Это пример для Mysqli подключения объекта:

//Test-ak 
    $db = new mysqli($dbHost, $dbUser, $dbPw, $dbName); 
    $db->set_charset("utf8"); 

Затем ваши запросы будут возвращать UTF-8 закодированных результаты.