首页 > 解决方案 > 使用 php 从数据库中获取带引号或撇号的字符串,使用 json_encode,然后尝试在 javascript 中解析 JSON

问题描述

我在数据库中有一个完整的字符串表,每个大约一个句子。有些有引号或撇号。我在 React-native 中运行 fetch,它运行一个 php 文件。这个 php 文件从表中获取一个随机项并将其回显,以便 javascript 可以解析 JSON 字符串并对其进行处理。如果字符串包含引号或撇号,应用程序会因“JSON 解析错误:意外 EOF”而崩溃。我尝试过 addlashes(),甚至尝试使用 php 函数 str_replace() 用晦涩的字符替换引号和撇号。无论哪种方式,我仍然会收到崩溃和相同的错误消息。这是这里的部​​分代码:

$get_fate = "SELECT * FROM $fates ORDER BY RAND() LIMIT 1";
$run_fate = mysqli_query($con, $get_fate);
$num_fates = mysqli_num_rows($run_fate);
if ($num_fates == 1) {
    $row_fate = mysqli_fetch_assoc($run_fate);
    $fate = $row_fate['fate'];

    $msg = addslashes($fate);
    $msg_json = json_encode($msg);
    echo $msg_json;
} else ...

和 javascript 方面:

getFate = async () => {
    let user = await AsyncStorage.getItem('email');

    fetch('fetch address goes here', {
        method: 'POST',
        headers: {
        'Accept': 'application/json',
        'Content-Type': 'application.json',
        },
        body: JSON.stringify({
            email: user
        })
    }).then((response) => response.json())
    .then((responseJson) => {
        this.setState({fate: responseJson});
    }).catch((error) => {
        console.error(error);
    });
}

这是崩溃的图像:

在此处输入图像描述

如果这意味着什么,我收到了一份包含所有这些“命运”的大字文件。我在 python 中使用了 fates.splitlines() 将它们全部分成单独的字符串并将它们放入一个数组中,我在 php 中循环并插入到数据库中。然后我注意到在引号和撇号应该有某种克林贡语的文本,所以我用以下 SQL 查询“修复”了它:

UPDATE choose_your_fate SET fate = REPLACE(fate, '“', '“');
UPDATE choose_your_fate SET fate = REPLACE(fate, 'â€', '”');
UPDATE choose_your_fate SET fate = REPLACE(fate, '’', '’');
UPDATE choose_your_fate SET fate = REPLACE(fate, '‘', '‘');

标签: javascriptphpjsonreact-native

解决方案


我让它工作了。通过手动输入将所有命运添加到数据库中;它不喜欢他们从word文档中复制粘贴。当我从数据库中取出它们时,有必要使用 addlashes(); 功能,以便文本显示在应用程序屏幕上。


推荐阅读