PHP preg_match将不允许æøå;

PHP preg_match将不允许æøå;,php,validation,utf-8,Php,Validation,Utf 8,我试图让我的注册脚本只接受字母和æå,但到目前为止我所尝试的一切都不起作用。它仍然不会接受 这是到目前为止我的代码 if ($_POST['first'] != "" && preg_match("%^[-a-zA-Z æøå\/]+$%", $_POST['first']) == true && strlen($_POST['first']) > 0) { $input_first = mysqli_real_escape_string($con

我试图让我的注册脚本只接受字母和æå,但到目前为止我所尝试的一切都不起作用。它仍然不会接受

这是到目前为止我的代码

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(); }

我做错了什么?

如果您的PHP文件已经是UTF-8编码的,您应该告诉您的数据库,您需要UTF-8。与其摆弄MySQL的配置,不如告诉您的连接对象,您希望使用哪个字符集,其余的由数据库来完成

以下是mysqli连接对象的示例:

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

之后,您的查询将返回UTF-8编码的结果。

在这里工作。
æå
是否作为这些字符到达服务器?你不需要所有的支票。由于正则表达式中的
+
,您知道有一个值,因此它不会为空,长度将大于1。如果您的模式和字符串是UTF-8编码的,则需要设置。请注意,您的测试是冗余的
!=“
strlen>0
是相同的,您的正则表达式禁止空值,因为您的
+
量词。