我目前使用mysql / php / javascript / googlecharts制作图表。
我的文字'然而,当我在Google Charts的Javascript中回显它时,该列会继续转义。 我需要在哪里放入一个真正的转义字符串来解决这个问题?
Example of Problem:
Tweet 1) "He'll be the last one there"
Tweet 2) "It's her pen"
解决方案将忽略' (撇号)带有mysqli_real_escape_string语句,但我不知道要实现它
<?php
$tablequery = mysqli_query($dbc,"SELECT handle,t_text, t_date,t_time,sentiment, score FROM tweets ");
while ($r=mysqli_fetch_assoc($tablequery))
{
$handle = $r["handle"];
$t_text= $r["t_text"];
$t_date= $r["t_date"];
$t_time= $r["t_time"];
$sentiment = $r["sentiment"];
$score= $r["score"];
$tablechart[] = "['".$handle."','".$t_text."','".$t_date."','".$t_time."','".$sentiment. "','".$score."']";
}
?>
<script type="text/javascript">
google.load("visualization", "1", {packages:["table"]});
google.setOnLoadCallback(drawTable);
function drawTable() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'User');
data.addColumn('string', 'Text');
data.addColumn('string', 'Date');
data.addColumn('string', 'Time');
data.addColumn('string', 'Sentiment');
data.addColumn('string', 'Score');
data.addRows([
<?php echo(implode(",",$tablechart));?>
]);
var table = new google.visualization.Table(document.getElementById('table_div'));
table.draw(data, {showRowNumber: true});
}
</script>
答案 0 :(得分:1)
如果我理解这个问题,这不是SQL查询在插入数据库时出现问题,而是输出到JavaScript的数据会破坏您的JavaScript吗?
如果是这样,这不是您需要使用add_slashes或DB层转义方法(例如mysqli_real_escape_string
)的问题。
从不尝试通过在字符串中“编写”代码来为另一种语言的一种语言构建数据结构。在这种情况下,JSON是完美的。
因此,只需使用您想要的数据构建PHP数据结构:
// takes $r and makes an indexed array of the values, then adds it to $tablechart
$tablechart[] = array_values($r);
// if $r holds more than you want to send, you could weed it out some:
$tablechart[] = array(
$r["handle"],
$r["t_text"],
$r["t_date"],
$r["t_time"],
$r["sentiment"],
$r["score"]
);
然后,使用此输出到您的JS:
data.addRows(<?php echo(json_encode($tablechart);?>);
PHP函数json_encode()
将PHP数据序列化为JSON。 JSON可以直接输出到JavaScript中,因为它使用JavaScript文字语法的子集。
永远记住你的“代码边界” - 也就是说,“我在哪里以及我拥有什么数据,从哪里开始?”想出来之后,确定是什么适当的数据准备方法用于数据的目的地并使用它。在这种情况下,您需要将PHP数据结构添加到JS中。 JSON和PHP的json_encode
是为这类事情而设计的。
已经提出了这些建议,以下是我将如何重构您发布的内容:
<?php
$tablequery = mysqli_query($dbc,'SELECT handle, t_text, t_date, t_time, sentiment, score FROM tweets');
$tablechart = array();
// using mysqli_fetch_row to get indexed array since that's what the JS was wanting
while ($r = mysqli_fetch_row($tablequery)) {
$tablechart[] = $r;
}
?>
<script>
(function (scope, tablechart) {
'use strict';
var document = scope.document,
google = scope.google;
google.load('visualization', '1', {
packages: ['table']
});
google.setOnLoadCallback(function () {
var data = new google.visualization.DataTable(),
table = new google.visualization.Table(document.getElementById('table_div'));
data.addColumn('string', 'User');
data.addColumn('string', 'Text');
data.addColumn('string', 'Date');
data.addColumn('string', 'Time');
data.addColumn('string', 'Sentiment');
data.addColumn('string', 'Score');
data.addRows(tablechart);
table.draw(data, {
showRowNumber: true
});
});
}(
this,
<?= json_encode($tablechart) ?>
));
</script>