За последние 24 часа нас посетили 22297 программистов и 1140 роботов. Сейчас ищет 731 программист ...

Экранирование "&"

Тема в разделе "PHP для новичков", создана пользователем Payalnik610, 7 авг 2019.

  1. Payalnik610

    Payalnik610 Активный пользователь

    С нами с:
    21 апр 2015
    Сообщения:
    6
    Симпатии:
    0
    беру из переменной адрес ссылки в виде:
    Код (Text):
    1. /forum/viewtopic.php?f=18&t=435&p=1468#p1468
    а при записи в БД в ячейке получается
    Код (Text):
    1. /forum/viewtopic.php?f=18&t=435&p=1468#p1468
    ...
    При записи в БД Через phpmyadmin, раскодирование амперсанда не происходит.... в чем проблема перевода его в код?
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень
    как записываешь в бд данные ? код
     
  3. Payalnik610

    Payalnik610 Активный пользователь

    С нами с:
    21 апр 2015
    Сообщения:
    6
    Симпатии:
    0
    Код (Text):
    1. UPDATE `fail_docs` SET `notification_scan`='1', `notification_link`='../forum/viewtopic.php?f=18&t=438&p=1474#p1474' WHERE `id`='250';

    в эту функцию отправляю.
    Код (Text):
    1. function write_general($request, $link = NULL, $time_reload=2, $message = NULL) {
    2.     echo $request;
    3.     include('bd2.php');
    4.     mysqli_query($db2, $request) or die ("Ошибка записи в БД SQL".mysqli_error());;
    5.     if (!isset($message) OR empty($message)) {
    6.         echo "<br>Обновление данных прошло успешно";
    7.     }
    8.     else {
    9.         echo $message;
    10.     }
    11.    
    12.     if (isset($link) AND !empty($link)) {reload($time_reload, $link);}
    13.     return TRUE;
    14.    
    15. }
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень
    а теперь страницу браузера откройте в исходном коде, и покажите что выводит
     
  5. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень
    @Valick, а эта функция разве экранирует амперсанты ? просто читаю доку и:
    PHP:
    1. Экранируемые символы NUL (ASCII 0), \n, \r, \, ', ", и Control-Z.
     
  7. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @MouseZver, должна экранировать, иначе моя жизнь никогда не будет прежней.
    P.S. я только 15 минут назад домой пришёл, нет сил проверять.
    --- Добавлено ---
    @MouseZver, кстати да, может и не должна, может при выводе строка ломается и MySQL тут ни при чём.
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.750
    Симпатии:
    1.322
    Адрес:
    Лень
    PHP:
    1. <?php
    2.  
    3. declare ( strict_types = 1 );
    4.  
    5. error_reporting ( E_ALL );
    6.  
    7. $c = new mysqli('','root','','git');
    8.  
    9. $c -> set_charset( 'utf8' );
    10.  
    11. $a = $c -> real_escape_string( "' 111 && 22 ---" );
    12.  
    13. $c -> query( "INSERT INTO test_77382 (message) VALUES ('{$a}')");
    (С) ;)

    [​IMG]
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    @Valick, ты попутал HTML-кодирование с экранированием для БД ;)
    --- Добавлено ---
    @Payalnik610, браузеры по идее должны понимать HTML-сущности в ссылках.
     
  10. Payalnik610

    Payalnik610 Активный пользователь

    С нами с:
    21 апр 2015
    Сообщения:
    6
    Симпатии:
    0
    в браузер без искажения:
    Код (Text):
    1. UPDATE `fail_docs` SET `notification_scan`='1', `notification_link`='../forum/viewtopic.php?f=18&t=438&p=1474#p1474' WHERE `id`='250';

    Мне нужно по этой ссылке на форум без отображения на странице в текущем моменте, а ввиду кодированого символа не понимает куда.

    По науке амперсанд не экранируется как я понимаю, а тут засада.
    пробовал несколько вариантов с функциями экранирования и все одинаково.

    Ощущение?что в кодировке ломает, соединение utf8, скрипт тоже, а вот на сервере UTF8 Unicode_ci
     
  11. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Payalnik610, показывай как выводишь на страницу из БД
     
  12. Payalnik610

    Payalnik610 Активный пользователь

    С нами с:
    21 апр 2015
    Сообщения:
    6
    Симпатии:
    0
    Вообщем если выводить ссылку из БД, в принципе вопросов нет, все исправно, если загонять в переменную данные из ячейки, то просо обработать. Чисто теперь душе не понятно зачем, амперсанд в код перегоняет.
     
  13. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    То, что ты показал, к экранированию для БД отношения не имеет. Это может делать даже редактор на клиенте, заранее подготавливая данные к будущему выводу. Попробуй переключиться в редакторе в режим ввода HTML-кода, если такая возможность есть, после чего уже вводи.