как в пхп вставить знак?

Тема в разделе "PHP", создана пользователем vave, 11 сен 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    383
    Симпатии:
    15
    Столкнулся с проблемой,
    вставляю знаки в код и они неверно отображаются!
    пример:
    PHP:
    echo "<option value='$row[make][b]&menu=home[/b]";
    а в браузере это выгляди так:
    wwwlala.com/index.php?make=blabla%25menu%3Dhome

    Помогите пожалуйста!
     
  2. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    если запрос передается методом GET, надо делать urlencode
     
  3. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    383
    Симпатии:
    15
    вот весь код
    PHP:
    <?php
                        $result 
    mysql_query("SELECT DISTINCT make FROM $dblist ORDER BY make ASC");
                        if(
    mysql_num_rows($result)) {
                            while(
    $row mysql_fetch_array($result)) {
                            
                                echo 
    "<option value='$row[make]?menu=home";
                                if(
    $row[make] == $_GET[make]) echo "selected='selected'";
                                echo 
    ">$row[make]</option>";
                            }
                        }
                        
    ?>
     
  4. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    383
    Симпатии:
    15
    смысл в том что мне в любом случае надо сделать так что бы в адресной строке была вписана строчка &menu=home
     
  5. studentpm

    studentpm

    Регистр.:
    8 ноя 2006
    Сообщения:
    184
    Симпатии:
    132
    PHP:
      <?php
            $result 
    mysql_query('SELECT DISTINCT `make` FROM `'.$dblist.'` ORDER BY `make` ASC;');
            if(
    mysql_num_rows($result)) {
                while(
    $row mysql_fetch_array($result)) 
                {
                    echo 
    '<option value="'.$row['make'].'?menu=home"'.
                    (
    $row['make'] == $_GET['make']? ' selected="selected"' '').
                    
    '>'.$row['make'].'</option>';
                }
            }
      
    ?>
     
  6. jID

    jID Постоялец

    Регистр.:
    12 фев 2008
    Сообщения:
    106
    Симпатии:
    31
    Вообще, старайся использовать символ конкатенации (склеивания).
    В PHP это точка.

    Например, код:
    PHP:
    <?
    $a="Вася";
    $b="Пупкин";
    echo 
    "$a $b";
    ?>
    равен коду:
    PHP:
    <?
    $a="Вася";
    $b="Пупкин";
    echo 
    $a." ".$b;
    ?>
    для сложения выражений можно использовать скобки:
    PHP:
    <?
    echo 
    "1+2=".(1+2);
    ?>
     
  7. painsource

    painsource Постоялец

    Регистр.:
    13 июл 2009
    Сообщения:
    64
    Симпатии:
    8
    Проследи какие функции проходит переменная перед отправкой на сервер.
    Мне кажется, что на каком то шаге чем-то делается urlencode
    Может и сам браузер меняет, можно еще попробовать в разных браузерах
     
  8. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    По теме - после тега <form ...> добавь:
    PHP:
    echo '<input type="hidden" name="menu" value="home" />';
    А в браузере всё верно отображалось, ему сказано передать на сервер строку blabla&menu=home, он её кодирует по правилам и передаёт, а сервер получает и раскодирует в аргумент make точно то, что написано между кавычками.
    -------------------
    А зачем стараться использовать оператор-конкатенацию?) Вроде и 2ные кавычки замечательно конкатенируют.
     
  9. moneypool

    moneypool Писатель

    Регистр.:
    11 сен 2009
    Сообщения:
    5
    Симпатии:
    0
    С точки зрения профессионального программирования на пхп, рекомендуется использовать конкатенацию строк, дабы это работает быстрее.
     
  10. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    Раньше тоже так думал, всегда и везде использовал одинарные кавычки, доходило до того что вместо "\r\n" писал chr(13).chr(10) . Потом сделал для себя синтетический тест на различных строках и получилось, что, если учавствуют 5 и более аргументов, запись с двойными кавычками работает на порядок (в 2-3 раза) быстрее явной конкатенации; при росте длины строк, явная конкатенация "точкой" проигрывает ещё больше. На мелких строках с малым количеством аргументов запись с кавычками медленнее примерно на 33%. Так что рекомендация сомнительна )) Если строк много и они большие, то много времени уходит на перевыделение памяти при присоединении каждой строки.

    Самое главное, что относительно других более ресурсоёмких операций - это мелочь, которая не стоит внимания. А способ конкатенации нужно выбирать исходя не из сомнительных выигрышей в скорости, а из удобства записи и чтения кода в каждом конкретном случае =)
     
Статус темы:
Закрыта.