首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用php从数据库中获取带引号或撇号的字符串,使用json_encode,然后尝试在javascript中解析JSON。

使用php从数据库中获取带引号或撇号的字符串,使用json_encode,然后尝试在javascript中解析JSON。
EN

Stack Overflow用户
提问于 2019-04-05 10:23:41
回答 2查看 198关注 0票数 0

我在数据库中有一个满是字符串的表,每个字符串大约有一个句子长。其中有些带有引号或撇号。我在React-native中运行一个fetch,它运行一个php文件。此php文件从表中获取一个随机项并回显它,以便javascript可以解析JSON字符串并对其执行操作。如果字符串包含引号或撇号,应用程序将崩溃,并显示"JSON parse error: unexpected“。我尝试过addslashes(),甚至还尝试使用php函数str_replace()将引号和撇号替换为晦涩难懂的字符。无论哪种方式,我仍然会得到崩溃和相同的错误消息。下面是代码的一部分:

代码语言:javascript
复制
$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端:

代码语言: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);
    });
}

这是一张坠机的图片:

如果这意味着什么的话,我收到了所有这些“命运”的一个很大的word文件。我在python中使用fates.splitlines()将它们分离成单独的字符串,并将它们放入一个数组中,然后在php中循环该数组并将其插入到数据库中。然后我注意到在引号和撇号应该出现的地方有某种看起来像klingon的文本,所以我用下面的SQL查询“修复”了这个问题:

代码语言:javascript
复制
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, '‘', '‘');

EN

回答 2

Stack Overflow用户

发布于 2019-04-05 16:36:03

要做的第一件事是向PHP添加一个内容类型(application/json)的头文件。

代码语言:javascript
复制
header('Content-Type: application/json');

接下来,可能是您的JSON格式不正确。不是使用

代码语言:javascript
复制
response.json() 

尝试使用

代码语言:javascript
复制
response.text()

这应该会从服务器返回字符串。

这可能是因为您的PHP中有一条错误消息在响应中返回,或者是JSON格式错误。

作为重构的一般要点。考虑在代码中使用try catches,这样就不会在遇到像这样的非显示停止程序时使应用程序崩溃。

像这样:

代码语言: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.text())
    .then((responseTxt) => {
        //Console log out the response, so you can see the response
        console.log(responseTxt);
    }).catch((error) => {
        console.error(error);
    });
}

操作员已声明来自服务器的响应不正确。

似乎有特殊的角色在破坏你的反应。您可以使用MySQL中的报价功能吗?

https://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_quote

票数 0
EN

Stack Overflow用户

发布于 2019-04-07 22:54:17

我把它修好了。通过手动键入插入的方式将所有的命运添加到数据库中;它不喜欢从word文档中复制粘贴它们。当我从数据库中获取它们时,有必要使用addslashes();函数,这样文本就会显示在应用程序屏幕上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55527410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档