2017-01-14 209 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編碼,你需要設置[the '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編碼的結果。