在Doctrine结果上使用jsonModel返回JSON数据时得到空响应-特殊字符编码问题

ezz*_*ili 3 php json doctrine-orm zend-framework2

我在获取ZF2 jsonModel从教义查询返回多结果时遇到问题。仅当我尝试返回数组结果时才出现此问题,而在返回单个项目时不出现此问题,代码如下:

public function mosquesAction() {

    $em = $this
            ->getServiceLocator()
            ->get('Doctrine\ORM\EntityManager');
    $dql = "select m.name from \Application\Entity\Mosque m ";
    $result = $em->createQuery($dql)->getResult();

    return new JsonModel($result);   
}
Run Code Online (Sandbox Code Playgroud)

清真寺实体是:

namespace Application\Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Entity */
class Mosque {

/**
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 * @ORM\Column(type="integer")
 */
private $id;

/** @ORM\Column(type="string") */
private $name;

/** @ORM\Column(type="string") */
private $address;

/** @ORM\Column(type="string") */
private $email;

/** @ORM\Column(type="string") */
private $website;

/** @ORM\Column(type="string") */
private $phone;

/** @ORM\Column(type="string") */
private $mobile;

/** @ORM\Column(type="string") */
private $fax;

/** @ORM\Column(type="string") */
private $coordinates;

/** @ORM\ManyToOne(targetEntity="Canton", inversedBy="mosques") */
private $canton;

public function getId() {
    return $this->id;
}

public function getName() {
    return $this->name;
}

public function setName($name) {
    $this->name = $name;
}

}
Run Code Online (Sandbox Code Playgroud)

当我将返回值更改为

return new JsonModel($result[0])
Run Code Online (Sandbox Code Playgroud)

我得到结果

{“名称”:“ IDTV-Mimar Sinan Camii”}

编辑:

我想我找到了问题的根源,我发布的代码没有问题,但似乎JsonModel无法处理特殊字符,例如

伊斯兰国王基金会

所以我现在的问题是,如何在php5.3的JsonModel中编码这些字符?

在此先感谢您,我的英语不好。

ezz*_*ili 5

在使用了不同的选项之后,我发现问题出在与MySQL数据库的理论连接上,因此我将数据库排序规则更改为_utf8_general_i_,并向驱动程序参数添加了一些参数:

'charset' => 'utf8',
'driverOptions' => array(
     1002 => 'SET NAMES utf8'
)
Run Code Online (Sandbox Code Playgroud)

现在我得到了期望的结果

{
    "id": 2,
    "name": "Föderation Islamischer Gemeinschaften LU",
    "address": "Hauptstrasse 58",
    "email": "",
    "website": "",
    "phone": "041 260 90 98",
    "mobile": "",
    "fax": "",
    "coordinates": "47.0666986,8.2812254"
}
Run Code Online (Sandbox Code Playgroud)