Php 将对象投射到数组后出现奇怪的问号

Php 将对象投射到数组后出现奇怪的问号,php,Php,我试图将对象强制转换为数组,以使用其受保护的属性。 不幸的是,数组键包含一些看起来像wierd的问号,因此我不能在代码中使用这些值。错误为“数组的未定义索引” 它来自哪里?我能做些什么 对象变量转储: object(testClassName)#35 (2) { ["name":protected]=> NULL ["path":protected]=> string(9) "files/" array(2

我试图将对象强制转换为数组,以使用其受保护的属性。 不幸的是,数组键包含一些看起来像wierd的问号,因此我不能在代码中使用这些值。错误为“数组的未定义索引”

它来自哪里?我能做些什么

对象变量转储:

object(testClassName)#35 (2) {
  ["name":protected]=>
  NULL
  ["path":protected]=>
  string(9) "files/"
array(2) {
  ["�*�name"]=>
  NULL
  ["�*�path"]=>
  string(9) "files/"
}
排版:

$object = new testClassName();
$array = (array) $object;
数组变量转储:

object(testClassName)#35 (2) {
  ["name":protected]=>
  NULL
  ["path":protected]=>
  string(9) "files/"
array(2) {
  ["�*�name"]=>
  NULL
  ["�*�path"]=>
  string(9) "files/"
}

如果您将属性更改为公共属性,是否仍会发生这种情况?我不知道其他人是否会不同意,但对我来说,如果它受到保护,如果没有某种方法返回它们,则不应访问它。我建议使用一种名为
getArray()
的方法,它返回您想要的值。三个符号通常表示编码问题。长话短说-多字节保存为Latin1等格式,并以utf-8格式打开。它也可能是“狂野”的空白(如\r\n)-该怎么做取决于这些标志的珍贵程度-您可以预先替换它们吗?如果没有,检查编码是什么,有免费的在线转换器。