我正在为Web服务使用WSDL。因此,我创建了一个WSDL页面并添加了一个功能。该函数是,连接我的表并返回JSON值。当我在其他PHP页面上调用此函数时,我会成功获取值。
[{"ID":"1","Number":"1"}]
但是,当我在WSDL页面中调用此函数时,会得到它:
[{"ID":"1","Number":"1","}]
这是我在WSDL中的功能:
public function A($a1,$a2,$a3,$o1)
{
include "../conf/database.php";
$SQL = "SELECT * FROM table_users";
$SQLResult=mysqli_query($conn,$SQL);
while($row=mysqli_fetch_assoc($SQLResult))
{
$JSON[] = $row;
}
return json_encode($JSON,JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_HEX_QUOT | JSON_HEX_APOS);
}
我找到了很多解决方案,但是没有用。我尝试 preg_replace,替换,但不能。我该如何解决这个问题?
我的WSDL PHP页面:
<?php
require_once "lib/nusoap.php";
$JSON= array();
public function A($a1,$a2,$a3,$o1)
{
include "../conf/database.php";
$SQL = "SELECT * FROM table_users";
$SQLResult=mysqli_query($conn,$SQL);
while($row=mysqli_fetch_assoc($SQLResult))
{
$JSON[] = $row;
}
return json_encode($JSON,JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_HEX_QUOT | JSON_HEX_APOS);
}
$server = new soap_server();
$server->configureWSDL("TryFunc", "MyURL");
$server->wsdl->addComplexType('A',
'complexType',
'struct',
'all',
'',
array(
'a1' => array('name' => 'a1', 'type' => 'xsd:string'),
'a2' => array('name' => 'a2', 'type' => 'xsd:string'),
'a3' => array('name' => 'a3', 'type' => 'xsd:int'),
'o1' => array('name' => 'o1', 'type' => 'xsd:string'),
)
);
$server->register('A',
array('a1' => 'xsd:string', 'a2' => "xsd:string",'a3' => "xsd:int",'o1' => "xsd:string"),
array("return" => "xsd:string"),
"",
"",
"rcp",
"encoded",
"document");
@$server->service(file_get_contents("php://input"));
答案 0 :(得分:-1)
非常简单:JSON不允许使用单引号。
至少在您使用PHP时,这实际上是违反直觉的,因为双引号将输出变量,单引号将输出文字变量名本身。尽管我个人认为这是一个缺陷,但为什么JSON严格首选双引号并不是我个人所知。在Duck Duck Go和Google上的搜索中,我找不到为什么。您可以研究原始作者道格拉斯·克罗克福德(Douglas Crockford),并查看他所编程的编程语言,因为它可能是PHP的反向,疏忽,热心的信念等。