Используйте php, чтобы получить строку с цитатами или апострофом из базы данных, используйте json_encode, а затем попытайтесь проанализировать JSON в javascript - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть таблица, полная строк в базе данных, по одному длинному предложению. У некоторых есть кавычки или апострофы. Я запускаю выборку в React-native, которая запускает файл 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);
    });
}

Вот изображение аварии:

enter image description here

И если это что-то значит, мне прислали большой файл слов о всех этих "судьбах". Я использовал fates.splitlines () в python, чтобы разделить их все на отдельные строки и поместить в массив, который я перебрал в 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, '‘', '‘');

Ответы [ 2 ]

0 голосов
/ 07 апреля 2019

Я получил это работает. Добавил все судьбы в базу данных, набрав вручную, чтобы вставить их; не понравилось, что они были скопированы из текстового документа. Когда я беру их из базы данных, необходимо использовать addlashes (); функция, чтобы текст отображался на экране приложения.

0 голосов
/ 05 апреля 2019

Первое, что нужно сделать, это добавить заголовок в ваш PHP типа контента (application / json).

header('Content-Type: application/json');

Дальше, вероятно, ваш JSON плохо сформирован. Вместо использования

response.json() 

пытается использовать

response.text()

это должно вернуть строку с сервера.

Возможно, в вашем PHP есть сообщение об ошибке, которое возвращается в ответе, или неправильно сформированный JSON.

Как общая точка рефакторинга. Подумайте об использовании ловушек try в своем коде, чтобы не вылетать из приложения, когда вы сталкиваетесь с не показанным стопором, подобным этому.

Как:

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);
    });
}

ОП указал, что ответ от сервера неверен.

Кажется, специальные символы нарушают ваш ответ. Можете ли вы использовать функцию QUOTE в MySQL?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...