PHP Web Service将HTML字符作为实体返回

时间:2015-03-04 17:20:24

标签: php android json

我有一个PHP Web服务,它以JSON格式返回数据。 我有一个自定义后端来维护数据。当我通过后端保存记录时,我在字符串字段上使用htmlspecialchars()。

示例Web服务调用将运行此代码:

$dbh = getConnection('read');

$sql = "SELECT Name, Location FROM Venues WHERE id = :venueID";
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':venueID' => $venue));
$data = $sth->fetchAll(PDO::FETCH_ASSOC);

header("Content-type: application/json");
print(json_encode(array('venues'=>$data)));

因此,假设对于提供的场地ID,该名称具有&在里面。 Web应用程序由Android应用程序调用,因此在应用程序中它显示为&而不是&

问题:

  1. 我是否调整自定义后端以不使用htmlspecialchars?我是唯一的管理员,所以进入的数据是安全的
  2. 在打印JSON之前,有没有办法在结果集上运行htmlspecialchars_decode而不循环结果?

1 个答案:

答案 0 :(得分:0)

这里真正的答案是你不应该是进入数据库的html编码数据。您希望数据库中的数据完全符合用户输入的内容。

工程师不希望以任何方式转义数据库中的数据。正如您所看到的,这样做会强制您记住在将数据从数据库中取出时对数据进行取消编码。在您的情况下,问题是htmlspecialchars永远不会被颠倒,因为浏览器会在呈现HTML时为您处理这些问题。

您通常会在PHP模板中使用HMTL转义,如下所示:

<?php
$db = //get database connection
$data = $db->read//....
?>
<div>
<?=htmlspecialchars($data)?>
</div>