微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当 utf-8 编码的输入包含变音符号时,htmlspecialchars 返回空字符串

如何解决当 utf-8 编码的输入包含变音符号时,htmlspecialchars 返回空字符串

我在验证字符串时遇到问题。

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 ö");

  1. 布尔(假)
  2. string(5) "UTF-8"
  3. string(9) "字符串 ö"
  4. string(9) "字符串 ö"

validate_input("String ä");

  1. string(5) "UTF-8"
  2. string(5) "UTF-8"
  3. string(8) "字符串�"
  4. string(0) ""(测试中禁用异常)

validate_input("String ü");

  1. 布尔(假)
  2. string(5) "UTF-8"
  3. string(9) "字符串ü"
  4. string(9) "字符串ü"

validate_input("String ê");

  1. string(5) "UTF-8"
  2. string(5) "UTF-8"
  3. string(8) "字符串�"
  4. string(0) ""(测试中禁用异常)

validate_input("String ß");

  1. string(5) "UTF-8"
  2. string(5) "UTF-8"
  3. string(8) "字符串�"
  4. string(0) ""(测试中禁用异常)

也许有人可以告诉我我错过了什么! 感谢帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。