为什么$ _POST数据一旦构造成一个对象,就会丢失UTF8字符?

时间:2019-06-15 11:07:54

标签: php utf-8

我一直在寻找有关UTF8字符问题的许多主题。我已经确认MySQL连接和数据库可以使用utf字符,并且发现了有趣的问题。

我有一个表单,其输入字段值由Class保留。但是,当$_POSTClass变量彼此相邻转储时,我注意到类变量不再包含UTF8字符。

“我的班级”具有以下构造函数(我只是粘贴相关的位,因为它是一个巨大的班级):

public function __construct($data = array()) {
    if ( isset( $data['id'] ) ) $this->id = (int) $data['id'];
    if ( isset( $data['order'] ) ) $this->order = preg_replace ( "/[^\.\,\-\_\'\"\@\?\!\:\$ a-zA-Z0-9()]/", "", $data['order'] );
    if ( isset( $data['comment'] ) ) $this->comment = preg_replace ( "/[^\.\,\-\_\'\"\@\?\!\:\$ a-zA-Z0-9()]/", "", $data['comment'] );
}

构造函数的目的是清除恶意输入中的输入,我还测试了正则表达式,它与输入的任何UTF8字符都不匹配,并用作$something = new Booking($_POST)

$_POSTClass

Postarray(17) { ["order"]=> string(18) "Külső-Belső Kárpit" ["comment"]=> string(0) "" } 

Booking obj:object(Booking)#3 (17) { ["id"]=> NULL ["order"]=> string(14) "Kls-Bels Krpit" ["comment"]=> string(0) "" }

我了解到类文件的编码可能有问题,我使用的是Atom,并且在检查时,文件的编码显示为UTF8。有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

我已经使用多个在线测试仪测试了var height = (48...96).map(String.init) print(height) 字符串,而这确实是摆脱了UTF字符的原因-https://www.regextester.com/表现得很好。