За последние 24 часа нас посетил 54261 программист и 1781 робот. Сейчас ищут 1157 программистов ...

Как вывести переменную, чтобы теги не интерпретировались?

Тема в разделе "PHP для новичков", создана пользователем borus, 5 дек 2012.

  1. borus

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

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    Здравствуйте.

    Пытаюсь вывести содержимое переменной в виде текста с помощью print_r,var_dump. Но неудобно то, браузер интерпретирует его как код страницы(внутри переменной часть будущего кода html страницы). Как сделать вывод содержимого без обработки браузером?
     
  2. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Re: Как вывести переменную, чтобы теги не интерпретировались

    Код (Text):
    1. <?php
    2. header('Content-type: text/plain; charset=utf-8');
    3. print_r($_SERVER);
    4. ?>
     
  3. borus

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

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    Re: Как вывести переменную, чтобы теги не интерпретировались

    благодарю.
    htmlentities помогло
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Re: Как вывести переменную, чтобы теги не интерпретировались

    Если таки надо вывести на html странице, я делаю так: htmlspecialchars(var_export($var, TRUE))
     
  5. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Re: Как вывести переменную, чтобы теги не интерпретировались

    это всё костыли, неправильно будут отображаться пробелы и переводы строк (как в обычном HTML)

    Есть ещё такой костыль
    Код (Text):
    1. <xmp><?php
    2. print_r($_SERVER);
    3. ?></xmp>
    но это всё равно только костыль, делать так нельзя
     
  6. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Код (PHP):
    1. <?php
    2. function _dump(){
    3.     $args = func_get_args();
    4.  
    5.     $content = '';
    6.     foreach ($args as $variable){
    7.         $content .= print_r($variable, true);
    8.     }
    9.  
    10.     $content = htmlspecialchars($content);
    11.     echo "<pre>" . $content . "</pre>";
    12. }
    13.  
    14. function vdump(){
    15.     $args = func_get_args();
    16.  
    17.     ob_start();
    18.  
    19.     $content = '';
    20.     foreach ($args as $variable){
    21.         var_dump($variable);
    22.     }
    23.  
    24.     $content = ob_get_clean();
    25.     $content = htmlspecialchars($content);
    26.     echo "<pre>" . $content . "</pre>";
    27. }
    28.  
    29.  
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Как вывести переменную, чтобы теги не интерпретировались

    xdebug поставить и var_dump() рулит
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Re: Как вывести переменную, чтобы теги не интерпретировались

    "правильно" или "неправильно" — зависит от контекста и ожиданий тестировщика.
    например внутри <pre> с пробелами и переводами каретки будет всё Ок. главное что var_export выдает данные именно в таком виде, каком их можно подставить в код, а htmlspecialchars делает вывод безопасным для любого места. можно хоть просто текстом, хоть в инпуты вывалить.
    так что я прав )))
     
  9. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Re: Как вывести переменную, чтобы теги не интерпретировались

    2+2 независимо от контекста будет 4 (теорию относительности и её релятивистское сложение где 2+2= 3.9999 мы в расчёт не берём, её многие опровергнуть сейчас пытаются)

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

    А я томат
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Re: Как вывести переменную, чтобы теги не интерпретировались

    Vladson, ты не томат. ты пьяница и пиздобол, imho. прости за переход на личности.
     
  11. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Re: Как вывести переменную, чтобы теги не интерпретировались

    Не извиняйся, я и лесть не люблю и на правду не обижаюсь. Вот когда предлагают костыли вместо кода, это бесит, но и в этом случае извиняться не нужно, потому что я такое не прощаю :)
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Как вывести переменную, чтобы теги не интерпретировались

    костыли это все ваши решения вышеупомянутые =)
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Re: Как вывести переменную, чтобы теги не интерпретировались

    дураки вы все ©

    Добавлено спустя 10 минут 33 секунды:
    Re: Как вывести переменную, чтобы теги не интерпретировались?
    кстати, 2+2 может равняться и 2 и 22 и 1
     
  14. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    А что тебе не понравилось? Объясни.
    Вывод через text/plain тут вряд ли подходит, т.к. основной контент скорей всего html.

    Предлагаю модифицированный костыль: значение переменной сохранять в файл, а потом выводить в теге object как раз таки с mime типом text/plain

    Код (PHP):
    1. <?php
    2. //var_to_plain.php
    3. $var='переменная тут с пробелами          и с переводами
    4.  
    5. строк
    6.  
    7. .
    8. ';
    9. ?>
    10. <!DOCTYPE html>
    11. <html>
    12. <head>
    13. <meta charset="UTF-8"/>
    14. <title>ы</title>
    15. </head>
    16. <body>
    17.  
    18. <?php
    19. echo $var;
    20.  
    21. var_dump($var);
    22.  
    23. file_put_contents('temp.txt',$var);
    24. ?>
    25.  
    26. <object data="temp.txt" codetype="text/plain" type="text/plain"></object>
    27.  
    28. </body>
    29. </html>
     
  15. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Re: Как вывести переменную, чтобы теги не интерпретировались

    Тема о том, вывести одну переменную для отладки. Нет?
     
  16. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Re: Как вывести переменную, чтобы теги не интерпретировались

    Да какая теперь разница? Тебя Vladson не простил.
     
  17. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Re: Как вывести переменную, чтобы теги не интерпретировались

    на него нельзя обижаться. он святой.
     
  18. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Re: Как вывести переменную, чтобы теги не интерпретировались

    То что это называют "безопасностью" это лишь приведение переменной в другой (понятный браузеру) формат, т.е именно то что по логике там должно быть, и его "безопасность" это лишь отсутствие явного бага. Слово безопасность должно описывать совсем другие ситуации.

    Добавлено спустя 6 минут 18 секунд:
    Re: Как вывести переменную, чтобы теги не интерпретировались?
    Просто стараюсь соответствовать своей подписи :)

    На самом деле не вполне понятно о чём, если эта переменная должна быть в уже сформированном HTML в каком-то месте (тогда подойдёт вариант с htmlspecialchars в тегах pre) например типа того
    Код (Text):
    1. ob_start();
    2. print_r($_SERVER);
    3. echo "<pre>" . htmlspecialchars(ob_get_clean()) . "</pre>";
    или это делается вместо вывода страницы (тогда подойдёт мой вариант с text/plain) когда вместо вывода шаблона выводится отладочная информация
     
  19. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Re: Как вывести переменную, чтобы теги не интерпретировались

    владсон, не парься. мы верим, что ты понимаешь. ну хотябы наполовину.
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Как вывести переменную, чтобы теги не интерпретировались

    блаженный, а не святой =)
     
  21. borus

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

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    Re: Как вывести переменную, чтобы теги не интерпретировались

    ничего не выводит
    вот код
    Код (Text):
    1.  
    2. <?php
    3. header('Content-type:text/html;charset=utf-8');
    4.  
    5. /*Получение данных.*/
    6. function data($path,$host)
    7. {
    8.     $fp = fsockopen($host, 80);
    9.     if (!$fp)
    10.     {
    11.         die('ошибка');
    12.     }
    13.     else
    14.     {
    15.         $out = "GET $path HTTP/1.0\r\n";
    16.         $out .= "Accept: image/gif, application/xhtml+xml, */*\r\n";
    17.         $out .= "Accept-Language: ru\r\n";
    18.         $out .= "Host: $host\r\n";
    19.  
    20.         //прикинемся оперой-мини
    21.         $out .= "User-Agent: Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1716; ru; U; ssr)\r\n";
    22.  
    23.         $out .= "Cache-Control: no-cache\r\n";
    24.         $out .= "Connection: Close\r\n\r\n";
    25.  
    26.         fwrite($fp, $out);
    27.         $headers = "";
    28.  
    29.         while ($str = trim(fgets($fp)))
    30.         $headers .= "$str\n";
    31.  
    32.         $body = "";
    33.  
    34.         while (!feof($fp))
    35.         $body .= fgets($fp);
    36.         fclose($fp);
    37.     }
    38.     //возвращаем данные
    39.     return $body;
    40. }
    41.  
    42. $host='1c.ru';
    43. $path='/rus/support/release/categ.jsp?GroupID=88';
    44.  
    45. //запуск
    46. $s=data($path,$host);
    47.  
    48. //выдаем результат (ТРЕТИЙ ЭТАП)
    49. //print_r($s);
    50. //var_dump($s);
    51. htmlspecialchars(var_export($s, TRUE));
    52. ?>
    А вот результат

    Добавлено спустя 6 минут 10 секунд:
    Re: Как вывести переменную, чтобы теги не интерпретировались?
    xdebug может отслеживать значения переменных на удаленном сайте?
    Кстати var_dump() выводит не так как нужно. Мне нужно вывести структуру переменной, чтобы отсечь лишнее в результате работы граббера
     
  22. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Re: Как вывести переменную, чтобы теги не интерпретировались

    блин, конечно не выводит. ))
    htmlspecialchars не выводит ничего, он возвращает строку. можешь вывести ее в echo или die
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Как вывести переменную, чтобы теги не интерпретировались

    Во-первых может, во-вторых он делает цветной html-вывод переменных и массивов и т.п.

    Добавлено спустя 2 минуты 32 секунды:
    Re: Как вывести переменную, чтобы теги не интерпретировались?
    Вардамп единственная функция, которая выводит всё 100% правильно =) уж прости, что-то ты не то делаешь.
     
  24. borus

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

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    Re: Как вывести переменную, чтобы теги не интерпретировались

    сейчас var_dump(htmlspecialchars(var_export($s, TRUE))); выручает.
    xdebug может отслеживать значения переменных на удаленном сайте или только на локальном?
     
  25. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: Как вывести переменную, чтобы теги не интерпретировались

    о боже мой... ты понимаешь что ты дампишь не значение переменной? зачем????????????
    на любом может, но IP прописывается жестко =) ташто считай только на локальном.