我是PHP的新手。我正在处理一个项目,该项目向从java创建的WSDL发出soap客户端请求,并将java程序的响应作为List返回。我想访问php中返回的数组对象中的字符串,但无法访问
请在下面找到我使用过的代码-
$client = new SoapClient("http://rakesh-pc:8080/WikiEdit/wikiSearchService?wsdl");
$user = $_SESSION['user'];
$params = array(
"arg0" => $user,
);
$result = $client->wikiFind($params);
var_dump($result);
我的程序得到了以下var_dump结果。抱歉,如果格式不正确。
object(stdClass)[2]
public 'return' =>
array (size=41)
0 => string '<http://en.wikipedia.org/wiki/Anarchism>' (length=40)
1 => string '<http://en.wikipedia.org/wiki/Red_and_Anarchist_SkinHeads>' (length=58)
2 => string '<http://en.wikipedia.org/wiki/Red_and_Anarchist_Skinheads>' (length=58)
3 => string '<http://en.wikipedia.org/wiki/Anti-statism>' (length=43)
4 => string '<http://en.wikipedia.org/wiki/Anarcho-capitalism>' (length=49)
5 => string '<http://en.wikipedia.org/wiki/Anarcho-Capitalism>' (length=49)
6 => string '<http://en.wikipedia.org/wiki/Individualist_anarchism>' (length=54)
7 => string '<http://en.wikipedia.org/wiki/Individualist_Anarchism>' (length=54)
....
我试过几种方法。让我困惑的是,如果我给count($result->return
)来访问对象,它给出的是41,这是正确的。但是,如果我在while循环中使用echo $result->return[$i]
尝试同样的方法来显示字符串,我只得到一个空白页面
这对在座的一些人来说可能听起来微不足道,但从昨天起我就一直在努力。如有任何帮助,我们将不胜感激。
您需要将对象转换为数组。我喜欢使用以下功能:
function objectToArray( $object ){
if( !is_object( $object ) && !is_array( $object ) ){
return $object;
}
if( is_object( $object ) ){
$object = get_object_vars( $object );
}
return array_map( 'objectToArray', $object );
}
$myResultArray = objectToArray($result);
var_dump($myResultArray);
echo $myResultArray[0];
解决方案
插入htmlspecialchars()
:
echo htmlspecialchars($result->return[$i], ENT_HTML5);
如何链接:
// Grab the raw URL
$url = substr($result->return[$i], 1, -1);
// Echo <a> incl. the text
echo "<a href='$url'>", echo htmlspecialchars($result->return[$i], ENT_HTML5), "</a>";
问题说明
请尝试在脚本开头插入以下行:
header('Content-type: text/plain');
我怀疑字符串的尖括号是"问题"。浏览器试图将它们解释为HTML标记,但失败后将其隐藏。
发送另一种内容类型(如纯文本)将阻止浏览器解释输出。
你也可以尝试这种方法,而不是我提供的第一种方法:
var_dump($result->return[$i]);
尝试:
$result = (array)$client->wikiFind($params);
print_r($result);
您应该将属性结果解析为数组:
print_r((array)$result->return)
我的版本
function objectToArray($data) {
if (is_object($data)&& !is_array($data)) {
$array = array();
$array[0] = $data;
return $array;
}else{
if (empty($data)){
return array();
}else{
return $data;
}
}
}