问题描述
我在验证字符串时遇到问题。
tldr: 期待 utf-8 输入并希望对其进行验证。 有些字符串编码无法检测,编码设置为UTF-8,我得到的结果没问题。 某些字符串编码被检测为 UTF-8(因此无需设置编码)但结果被搞砸了。
仅供参考:我希望将存储在数据库中的 UTF-8 输入,所以我想验证给定的输入。 Input 可以包含德语元音变音,如 äÄ üÜ öÖ,此时我的代码显示出非常奇怪的行为。
以下代码段显示了我为检查输入而构建的函数。我添加了一些转储来看看会发生什么......
function validate_input($pdata){
$data = $pdata;
var_dump(mb_detect_encoding($data)); //(1)
// detects encoding and changes to UTF-8 if the given is not utf-8 encoded
if(mb_detect_encoding($data) != "UTF-8"){
$data = utf8_encode($data);
}
var_dump(mb_detect_encoding($data)); //(2)
var_dump($data); //(3)
//Converts specialchars to HTML-entities. If output is an empty string throw exception
if(($data = htmlspecialchars($data,ENT_QUOTES,"UTF-8")) == ""){
throw new validationException("Invalid Charsequence causes empty String! Original data : {$pdata}");
}
var_dump($data); //(4)
$data = trim($data);
$data = stripcslashes($data);
return $data;
}
这里是我测试的案例和奇怪的结果
validate_input("String ö");
- 布尔(假)
- string(5) "UTF-8"
- string(9) "字符串 ö"
- string(9) "字符串 ö"
validate_input("String ä");
- string(5) "UTF-8"
- string(5) "UTF-8"
- string(8) "字符串�"
- string(0) ""(测试中禁用异常)
validate_input("String ü");
- 布尔(假)
- string(5) "UTF-8"
- string(9) "字符串ü"
- string(9) "字符串ü"
validate_input("String ê");
- string(5) "UTF-8"
- string(5) "UTF-8"
- string(8) "字符串�"
- string(0) ""(测试中禁用异常)
validate_input("String ß");
- string(5) "UTF-8"
- string(5) "UTF-8"
- string(8) "字符串�"
- string(0) ""(测试中禁用异常)
也许有人可以告诉我我错过了什么! 感谢帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)