2016-01-02 4 views
2

Я возвращаю данные из файла PHP, который содержит escape-косые черты, которые необходимо удалить.PHP, не удаляющий слэш управления

Я создал объект возврата, который является многомерным массивом. Я возвращаю его с json_encode($data, JSON_UNESCAPED_SLASHES), но косые черты не удаляются.

Я также пробовал различные методы, которые включают в себя цикл, хотя каждая отдельная строка в массивах, используя, и даже это не сработало.

У меня нет проблем с возвратом желаемых данных в правильную структуру JSON, но я не могу избавиться от этих косых черт!

$data = array('bodyCopy' => array(), 'projects' => array()); 

$sql = "SELECT * FROM " . $table; 
$result = mysqli_query($conn, $sql) or die("Error in Selecting " . mysqli_error($conn)); 
while($row = mysqli_fetch_assoc($result)) { 
    $data['bodyCopy'] = $row; 
} 

$sql = "SELECT * FROM experienceSectionProjects"; 
$result = mysqli_query($conn, $sql) or die("Error in Selecting " . mysqli_error($conn)); 
while($row = mysqli_fetch_assoc($result)) { 
    array_push($data['projects'], $row); 
} 

echo json_encode($data, JSON_UNESCAPED_SLASHES); 

мое возвращение объект уборные, как это:

EDIT Вот некоторые реальные данные, которые содержат косую черту:

{ 
    "bodyCopy":{ 
    "title":"Experience's", 
    "headerIcon":"briefcase", 
    "introCopy":"Don't", 
    "gridHeader":"header" 
    }, 
    "projects":[ 
    { 
    "id":"1", 
    "company":"Medical Mutual", 
    "position":"UI Developer", 
    "logo":"medmutual.png", 
    "backgroundImg":"medMutual.jpg", 
    "projectSummary":"Online enrollment application for health insurance marketplace", 
    "description":"I work as the dedicated front end developer on the online enrollment application for the Medical Mutual Individual Insurance Marketplace and Medicare Advantage Marketplace. As front end developer my main responsibility is generating HTML/CSS/JS for the users interface. I collaborate with server side developers in an C#.NET MVC environment to create dynamic content and integrate the code from the UI into Sitecore. Aside from the Online Enrollment applications, I am involved with developing other public facing websites for the company including an internal recruitment website." 
    }, 
    { 
    "id":"2", 
    "company":"Macy\'s", 
    "position":"UI/AngularJS Developer", 
    "logo":"macys.png", 
    "backgroundImg":"macys.jpg", 
    "projectSummary":"CRM software for in store sales associates", 
    "description":"" 
    } 
] 
} 

EDIT

Это может дать больше Информация. Это, как я пишу значение в базу данных:

$projects = $p['projects']; 
    if(is_array($projects)) { 
     foreach ($projects as $project) { 

      $id = $project['id']; 
      $company = mysqli_real_escape_string($conn, $project['company']); 
      $position = mysqli_real_escape_string($conn, $project['position']); 
      $logo = mysqli_real_escape_string($conn, $project['logo']); 
      $backgroundImg = mysqli_real_escape_string($conn, $project['backgroundImg']); 
      $projectSummary = mysqli_real_escape_string($conn, $project['projectSummary']); 
      $description = mysqli_real_escape_string($conn, $project['description']); 

      $Query = $conn->prepare("INSERT INTO experienceSectionProjects (id, company, position, logo, backgroundImg, projectSummary, description) 
      VALUES (?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE company = VALUES(company), position = VALUES(position), logo = VALUES(logo), backgroundImg = VALUES(backgroundImg), projectSummary = VALUES(projectSummary), description = VALUES(description)"); 
      $Query->bind_param('issssss', $id, $company, $position, $logo, $backgroundImg, $projectSummary, $description); 
      $Query->execute(); 
      $Query->close(); 
     } 
    } 
+2

Где вы видите сокращения внизу? – Ctx

+0

Я удалил реальные данные для удобочитаемости, потому что я не думал, что это будет иметь значение, но я добавлю некоторые реальные данные, если вы думаете, что это поможет вам – Ian

+0

Вы подтвердили, что константа - это то, что вы думаете? – Rooster

ответ

3

mysqli_real_escape_string добавляет слеши в строку, так что, когда вы кладете его в запросе SQL, специальные символы не будут рассматриваться как специальные символы.

bind_param передает переменные в подготовленное заявление , не помещая их непосредственно в оператор SQL.

Сделайте одно или другое (подсказка: bind_param is saner) не оба.

+0

Спасибо, что сделали! – Ian

3

Заменить все строки, содержащие mysqli_real_escape_string() с этим ...

$company = $project['company']; 
$position = $project['position']; 
$logo = $project['logo']; 
$backgroundImg = $project['backgroundImg']; 
$projectSummary = $project['projectSummary']; 
$description = $project['description']; 

mysqli_real_escape_string() добавляет косую черту, где необходимы для того, чтобы сырой запрос не упасть. Вы уже используете подготовленные операторы, которые связывают переменные после подготовки необработанного запроса, так что это не требуется.

+0

Спасибо, что сделал! Я должен был дать первый ответ зеленой галочкой, хотя он избил вас на несколько минут – Ian

Смежные вопросы