我在数据库中有一个满是字符串的表,每个字符串大约有一个句子长。其中有些带有引号或撇号。我在React-native中运行一个fetch,它运行一个php文件。此php文件从表中获取一个随机项并回显它,以便javascript可以解析JSON字符串并对其执行操作。如果字符串包含引号或撇号,应用程序将崩溃,并显示"JSON parse error: unexpected“。我尝试过addslashes(),甚至还尝试使用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);
});
}这是一张坠机的图片:

如果这意味着什么的话,我收到了所有这些“命运”的一个很大的word文件。我在python中使用fates.splitlines()将它们分离成单独的字符串,并将它们放入一个数组中,然后在php中循环该数组并将其插入到数据库中。然后我注意到在引号和撇号应该出现的地方有某种看起来像klingon的文本,所以我用下面的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, '‘', '‘');
发布于 2019-04-05 16:36:03
要做的第一件事是向PHP添加一个内容类型(application/json)的头文件。
header('Content-Type: application/json');接下来,可能是您的JSON格式不正确。不是使用
response.json() 尝试使用
response.text()这应该会从服务器返回字符串。
这可能是因为您的PHP中有一条错误消息在响应中返回,或者是JSON格式错误。
作为重构的一般要点。考虑在代码中使用try catches,这样就不会在遇到像这样的非显示停止程序时使应用程序崩溃。
像这样:
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
发布于 2019-04-07 22:54:17
我把它修好了。通过手动键入插入的方式将所有的命运添加到数据库中;它不喜欢从word文档中复制粘贴它们。当我从数据库中获取它们时,有必要使用addslashes();函数,这样文本就会显示在应用程序屏幕上。
https://stackoverflow.com/questions/55527410
复制相似问题