Проблема с отображением изображений, сохраненных в виде изображений BLOB-объектов - PullRequest
0 голосов
/ 21 января 2019

У меня проблема с отображением изображений, хранящихся в виде BLOB-объектов в моей базе данных, так как изображения не отображаются, а отображаются сумасшедшие символы и символы, я пытался изменить теги для php, но безрезультатно. Справка и вот мой код: Обратите внимание, что я хочу, чтобы все типы изображений были сохранены в виде BLOB-объектов (JPG, JPEG, GIF, SVG, PNG) - заранее спасибо

    <?php
        include 'include/connect.php';
        $sql = "SELECT * FROM room_details ORDER BY id ASC LIMIT 2, 1;";
        $result = mysqli_query($conn, $sql);
        if (mysqli_num_rows($result) > 0) {
          while($row = mysqli_fetch_assoc($result)) {

    ?>


        <div class="room-thumb"><?php echo '<img alt="room 3" class="img-responsive" src="data:image;base64,'.$row['image'].'">'; ?>
            <div class="mask">
              <div class="main">
                <h5><?= $row['room_type']; ?></h5>
                <div class="price"><?= $row['room_name']; ?><span>a night</span></div>
              </div>

                <a href="room-detail.html" class="btn btn-primary btn-block">Read More</a>
              </div>
          </div>

          } ?>

1 Ответ

0 голосов
/ 21 января 2019

Поскольку URL-адрес большого двоичного объекта декодируется с помощью base64, вам необходимо сначала его кодировать.Для этого вы можете использовать JavaScript или PHP .

JavaScript:

С JavaScript вы можете просто использовать atob () функция для кодирования вашего base64 url ​​следующим образом:

<script>
  var x = <?php echo $row['image'] ?>
  document.getELementById("code").innerHTML = atob(x);
</script>

<div class="room-thumb"><?php echo '<img alt="room 3" class="img-responsive" src="data:image;base64,' ?><span id="code"></span><?php echo '">'; ?>
    <!-- DIV CONTENT HERE -->
</div>

Однако, как указано в этом другом потоке SO , было бы лучше, если бы вы использовали сам PHP или другие подходы JavaScript (упомянутые втот же поток) для извлечения и кодирования URL-адреса base64, поскольку вышеприведенный подход небезопасен.


PHP:

С помощью PHP вы можете либо кодировать URL-адрес base64 перед его выводом в свойHTML вроде этого:

<?php echo '<img alt="room 3" class="img-responsive" src="data:image;base64,' . base64_encode(.$row['image']).'">'; ?>

Или вы можете создать новый php-файл, кодировать PHP в этом файле и затем отобразить закодированный URL-адрес base64 в свой HTML-код следующим образом:

    <!-- PHP file -->
    <?php
      $id = (isset($_GET['id']) && is_numeric($_GET['id'])) ? intval($_GET['id']) : 0;
      $image = base64_encode(getImageFromDatabase($id)); // your code to fetch the image
    
      header('Content-Type: image/jpeg');
      echo $image;
    ?>

    <!-- HTML -->
    <img src="image.php?id=<?php echo $image_id; ?>" />

Проверьте принятый ответ в этом другом SO-потоке для более подробного объяснения двух вышеупомянутых подходов PHP.

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