我有一个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应用程序调用,因此在应用程序中它显示为&而不是&
问题:
答案 0 :(得分:0)
这里真正的答案是你不应该是进入数据库的html编码数据。您希望数据库中的数据完全符合用户输入的内容。
工程师不希望以任何方式转义数据库中的数据。正如您所看到的,这样做会强制您记住在将数据从数据库中取出时对数据进行取消编码。在您的情况下,问题是htmlspecialchars
永远不会被颠倒,因为浏览器会在呈现HTML时为您处理这些问题。
您通常会在PHP模板中使用HMTL转义,如下所示:
<?php
$db = //get database connection
$data = $db->read//....
?>
<div>
<?=htmlspecialchars($data)?>
</div>