在MySQL中处理特殊字符

时间:2019-01-02 22:13:40

标签: javascript php mysql

我正在构建一个传单Web应用程序,该应用程序存储分配给地理位置的消息。

我通过使用以下方式将数据从javascript发送到PHP来一次添加一行数据:

$name = mysqli_real_escape_string($conn, $_POST['NAME']);
$latitude = mysqli_real_escape_string($conn, $_POST['LATITUDE']);
$longitude = mysqli_real_escape_string($conn, $_POST['LONGITUDE']);
$message = mysqli_real_escape_string($conn, $_POST['MESSAGE']);

$sql = "INSERT INTO geoData (NAME,LATITUDE,LONGITUDE,MESSAGE)
VALUES ('$name', '$latitude', '$longitude', '$message')";

我使用PHP取回数据,以使用以下命令将数据回显到javascript:

$conn = mysqli_connect($dbServername,$dbUsername, $dbPassword, $dbName);
if(! $conn ){
    die('Could not connect: ' . mysqli_error());
}
$sql = 'SELECT * FROM geoData';

$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        $rows[] = $row;
    }
 } else {
    echo "0 results";
 } 

mysqli_close($conn);

<script type="text/javascript">
        var data = JSON.parse( '<?php echo json_encode($rows); ?> ' ); 
</script>

这很好用,除非该消息具有特殊字符,例如撇号,例如“戴夫的狗的骨头”。这会产生错误

这种使用PHP和javascript的应用程序的最佳实践是什么?我想我需要某种方式来编码特殊字符,然后javascript可以解码并显示这些特殊字符。

错误如下: 参数列表后未捕获到的SyntaxError:缺少

<script type="text/javascript">
        var data = JSON.parse( '[{"NAME":"The Kennel","LATITUDE":"50.7599143982","LONGITUDE":"-1.3100980520","MESSAGE","Dave's Dog's Bone"}] ' ); 
</script>

非常感谢

2 个答案:

答案 0 :(得分:4)

问题是您的JSON.parse(),在这种情况下根本不需要。

更改:

var data = JSON.parse( '<?php echo json_encode($rows); ?> ' );

var data = <?= json_encode($rows); ?>; 

JSON.parse()用于解析字符串化的json。从json_encode()回显结果将立即为您提供正确的结果。

旁注

如果查询未返回任何结果,我建议您在$rows = [];if (mysqli_num_rows($result) > 0)之前添加json_encode($rows),然后抛出“未定义的变量”(因为该变量当前是在在循环浏览结果时循环播放。)

旁注2

进行数据库查询时,建议使用参数化的Prepared Statements而不是mysqli_real_escape_string()来手动转义和构建查询。当前,建议使用预备语句来保护自己免受SQL注入的侵扰,并确保您不会忘记或错过以逃避某些价值。

答案 1 :(得分:0)

您可以通过在json中添加'自己产生该错误。如果您要检查使用此:

JSON.parse( '[{"NAME":"The Kennel","LATITUDE":"50.7599143982","LONGDITUTE":"-1.3100980520","type":"bad","reason":"Dave\'s Dog\'s Bone","improvement":"","reviewed":"0"}] ' );

如果要更正主代码中的var数据,请先将str.replace(/'/g, '"')解析为json。