我正在尝试使用mysql DB为iPhone制作一个简单的journalview应用程序。我正在使用 php 连接到数据库并将数据编码为 json。我正在使用一个非常简单的数据库,其中包含 3 列:
- 编号
- 主题
- 消息
当我从表中选择 id 和主题时,JSON 数据会正确显示。当我选择所有内容或单独选择消息时,我只看到一个白屏。消息列是数据类型文本,应该能够有奇怪的符号(/,'',̈,$,%,空格,行,...(获取要显示的消息数据的唯一方法是在连接文件中执行以下操作:
while($r = mysql_fetch_assoc($resultset))
{
//$r = preg_replace("!'r?'n!", " ",$r);
$r= json_encode($r);
$records[] = $r;
}
//Output the data as JSON
echo json_encode($records);
}
}
但是,返回的数据充满了反斜杠 ''r、',并且看起来不像有效的 json:
[{"id":"248","subject":"General","message":"Dear Diary'r'n'r'nThis is a test.'r'nDoes it work or not?!'r'n'r'nGoodbye.'r'n'r'n'r'nD"},{"id":"249","subject":"General","message":"Hi'r'n'r'nThis is Test number 2.'r'nDoes it Work?'r'n'r'n'/'/ goodbye ''''"}]
如果我清空我的消息列并放入没有特殊标志的普通文本,它工作正常,所以我猜这就是问题所在。但是,如果消息可以包含特殊字符和反斜杠,我会更好,这可能吗?
' 和 ''r 有效,它们很好。它们是隐藏的图表,它们也以这种方式存储在您的数据库中,因此您有 2 个选项。使用以下函数清理数据库,或者在将项目放入 JSON 之前清理项目。
function clean($string) {
$string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
return preg_replace('/[^A-Za-z0-9'-]/', '', $string); // Removes special chars.
}
如果要保留特殊字符转义它们解析包含换行符的 JSON