我有一个PHP函数来验证“城市”:
function validate_city($field) {
if ($field == "") return "Enter city.<br />";
else if (preg_match("/[^а-Яa-zA-z-]/", $field))
return "City hame only from letters and -.<br />";
return "";
}
每当我输入西里尔城市名称(例如“Минск”)时,它返回: 城市hame只来自字母和 - 。 变量$ _POST ['city']看起来像: Ð Ð¸Ð½Ñ Ðº
在JS中,这段代码是正确的,我认为有些东西是编码.....
答案 0 :(得分:13)
答案 1 :(得分:4)
匹配西里尔字母和普通字符的更好解决方案是:
preg_match ('/^[\p{Cyrillic}\p{Common}]+$/u', $str);
答案 2 :(得分:2)
这看起来像utf-8,如果是,来自php.net的cebelab的这个提示可能会有所帮助:
我注意到为了处理 UTF-8文本,无需 使用PCRE UTF-8标志重新编译php 启用后,您只需添加即可 按顺序开始 你的模式:(* UTF8)
例如:'#(* UTF8)[[:alnum:]]#' 将为'é'返回TRUE '#[[:alnum:]]#'将返回FALSE
使用内置特殊字符组:alnum:为此,您需要撤消匹配:
function validate_city($field) {
if ($field == "") return "Enter city.<br />";
else if (preg_match("/(*UTF8)^[[:alnum:]]+$/", $field))
return "";
return "City hame only from letters and -.<br />";
}
编辑,啊,在正则表达式中忘了utf-8; )
答案 3 :(得分:0)
是的,这是一个编码问题 把它放在你的页面中:
<META http-equiv="Content-Type" content='text/html;charset="UTF-8"'>
或者这个:
<META http-equiv="Content-Type" content='text/html;charset="windows-1251"'>
答案 4 :(得分:0)
您必须确保所有文件在相应位置具有相同的编码或编码/解码数据。如果你正在使用utf-8,请检查: - 您的页面以正确的编码方式显示(浏览器 - &gt;视图 - &gt;编码) - 您的文件具有正确的编码
您的数据库(如果有的话)也应该与您在其他地方选择的编码相同。
答案 5 :(得分:0)
检查响应标头中的编码(FireBug是一个很棒的工具)。可能您在Webserver配置中的值不正确(例如,.htaccess文件中的AddDefaultCharset
)。
PS。使用UTF regexp而不是字符范围(preg_match("/[^\pL-]/u", $field)
)
答案 6 :(得分:0)
变量$_POST['city']
如下所示:Ð�инÑ�к
这不是UTF-8
....也许问题出现在$_POST
?