Парсер и обратная косая черта.

Sergey955

Новичок
Здравствуйте! Помогите решить проблему.
Парсю данные из xml, складываю их в MySQL, суть проблемы в том, что при выгрузке, некоторые значения в xml заданы например так: 495\. Само собой, скрипт вываливается с ошибкой. Подскажите, как с этим бороться, на уравне кода?
 

Sergey955

Новичок
Вопрос и состоит в том, каким образом мне нужно сделать обработку?
P.S меня искренне напугали ваши экстрасенсорные способности. В 320, если быть точным..
 
Последнее редактирование:

Sergey955

Новичок
Как это поможет мне избавиться от того, что значение переменной, которую я парсю получается 495\ ?
например $a="495\"; Сразу возникает проблема с кавычкой. Думаю, что ее нужно заэкранировать, но я не знаю как.

Ну это, как минимум, забавно. Т.к парсер самописный, а код я вам не показывал.
 

hell0w0rd

Продвинутый новичок
Sergey955, оО это переменная, в переменную можно положить все что хочешь, в чем проблема?
PHP:
$d = new DOMDocument();
$d->loadXml('<?xml version="1.0"?><test><node>495\</node></test>');
var_dump($d->firstChild->firstChild->firstChild->nodeValue);
Все ок
 
Последнее редактирование:

Sergey955

Новичок
hell0w0rd, пожалуйста, попробуйте запустить:
<?php
$a="\";
?>

Завершится ошибкой. При подстановке 495\ в SQL запрос, само собой тоже. Чуть позже попробую
http://php.net/manual/ru/function.addslashes.php
Но решение не очень красивое, я так понимаю, что значение в БД попадет с этими слешами.
 

hell0w0rd

Продвинутый новичок
Sergey955, а при чем тут xml?
В php \ является экранирующим символом, благодаря ему вы можете написать так и все будет ок:
PHP:
$a = "Привет \"Вася\"";
Соответственно его тоже нужно экранировать им же:
PHP:
$a = "\\";
 

Sergey955

Новичок
hell0w0rd, это вы заговорили про xml, я не знаю почему :)

Дело в том, что у меня есть база на 6 лямов строк. И дело в том, что у кода города в XML, обратный слеш встречается, но редко. Экранировать код города всегда - не имеет смысла. А как проверить, заканчивается ли переменная обратным слешом, если она экранирует кавычку?

Можно заэкранировать, но я не могу понять, как мне составить условие, которое сработает, если экранирование необходимо.
 

hell0w0rd

Продвинутый новичок
Sergey955,
это вы заговорили про xml, я не знаю почему
некоторые значения в xml заданы например так: 495\
Вы издеваетесь?
Вы когда в переменную записываете что-то, происходит копирование в памяти - и все!
У вас ломаются парсеры php/sql, если не экранировать \, вот тут да - понятно.
Вам нужно либо использовать real_escape_string в mysqli, либо освоить подготовленные выражения и вставлять в базу данные используя их.
https://github.com/FountainDb/pdoshechka - вот тут простая обертка.
 

riff

Новичок
Sergey955,
значение переменной, которую я парсю получается 495\ ?
например $a="495\"; Сразу возникает проблема с кавычкой.
Пока ты не покажешь что ты там делаешь, боюсь твой вопрос не имеет смысла. Тем более видно, что знаний у тебя не достаточно.
Ответ выше (я страницу забыл обновить).
 
Последнее редактирование:

hell0w0rd

Продвинутый новичок
riff, Да все уже понятно) Он пишет как-то так:
PHP:
$sql = "INSERT INTO blabla ('city_code') VALUES('$cityCode')";
А на деле у него там получается
PHP:
INSERT INTO blabla ('city_code') VALUES('495\')
 

Sergey955

Новичок
Всем спасибо за потраченное время.
mysql_real_escape_string целеком решает мои проблемы.
Всем удачного дня.
 

vasinsky

Новичок
или PDO, кому что по вкусу, но от mysql нужно уходить - и уж тем более не начинать писать с ним свои проекты - mysql более не поддерживается разрабами
 
Сверху