处理mysql内外的特殊字符

im9ewurl  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(308)

我正在构建一个传单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>

除非消息中有特殊字符,如撇号,例如“dave's dogs's bone”,否则这种方法很有效。这会产生一个错误
使用php和javascript的应用程序的最佳实践是什么。我想我需要一些方法来编码javascript可以解码和显示的特殊字符。
错误出现在:uncaught syntaxerror:missing)参数列表之后

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

非常感谢

8dtrkrch

8dtrkrch1#

通过在json中添加'。如果要检查,请使用以下选项:

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

如果你想在主代码中纠正这一点 str.replace(/'/g, '"') 对于var数据,在将其解析为json之前。

8mmmxcuj

8mmmxcuj2#

问题是你的 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)` 如果查询不返回任何结果,将抛出一个“undefined variable”(因为当前该变量是在循环遍历结果时在循环内创建的)。
旁注2
在进行数据库查询时,建议使用参数化的prepared语句,而不是使用 `mysqli_real_escape_string()` 用于手动转义和生成查询。prepared语句是目前推荐的防止sql注入的方法,确保您不会忘记或错过一些值的转义。

相关问题