2012-04-09 5 views
1

Строка выглядит следующим образом:Php эхо, где оба "и" используются в строке

<form id="unban" method="post" action="unban.php?uid=<? echo $uID; ?>"> 
       <input type="hidden" name="name" value="" /> 
       <a onclick="document.getElementById('unban').submit();">UnBan</a> 
       </form> 

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

echo "<tr><td>" . $row['username'] . "</td><td>" . $banBool . "</td><td>". $status ."</td><td>" . $row['full_name'] . "</td></tr>"; 

где $status будет выше в зависимости от формы если заявление.

Есть ли способ удержать его как строку и все еще сделать это?

Кроме того, только для уточнения яваскрипта синтаксис требует «цели» и оленья кожа позволяют «цель»

+2

вы можете избежать котировки с \ – prodigitalson

+2

Ewww, то ' animuson

+0

@animuson no вы не должны, mpm

ответ

2

Вы можете написать нормальный HTML в PHP, если-блок - просто закрыть и повторно открыть PHP теги:

<?php 
if($something == $somethingelse) { 
    ?> 
    <form id="unban" method="post" action="unban.php?uid=<?php echo $uID; ?>"> 
    ... 
    </form> 
    <?php 
} 

Если вам действительно нужно держать его в строке, просто убедитесь, чтобы избежать какой тип кавычек держат строку, добавляя обратный слеш перед каждым одним:

$status = '<form id="unban" method="post" action="unban.php?uid='.$uID.'"> 
      <input type="hidden" name="name" value="" /> 
      <a onclick="document.getElementById(\'unban\').submit();">UnBan</a> 
      </form> 

(Также обратите внимание, вы не можете сделать эхо в одной переменной - просто сцепить строку с переменной)

+0

Спасибо за вашу помощь! – zomboble

0

Чистейшая способ, которым я хотел бы повторить с переменными внутри строки, как так:

echo "This is a string with a {$variables["variable"]} in it. If I have to use another double-quote within this string I'll escape it with a \"backslash\"."; 

Я обычно полностью избегаю смешивания одиночных и двойных кавычек (за исключением случаев, когда это необходимо, подобно вашей функции JavaScript), чтобы уменьшить путаницу.

Ваш HTML может быть записана следующим образом:

echo "<form id=\"unban\" method=\"post\" action=\"unban.php?uid={$uID}\"> 
    <input type=\"hidden\" name=\"name\" value=\"\" /> 
    <a onclick=\"document.getElementById('unban').submit();\">UnBan</a> 
</form>\n"; 

Результирующая строка, которая будет иметь через echo природные символы и будет иметь правильное форматирование пробелов.

+0

Я никогда этого не делаю или рекомендую. Очень сложно отследить, где переменные, а часто и времена, совершенно неверны. Обычно переменные должны быть экранированы, чтобы избежать XSS, а что нет. Конкатенация или множественные параметры эха - это путь, на мой взгляд. – Brad

+0

Я нахожу, что этот метод облегчает отслеживание, где находятся переменные (Notepad ++ выделяет их в белом вместо того, чтобы держать их серыми). Как это «часто раз» совершенно неправильно? И как это мешает вам избежать ваших переменных? Вы можете либо сбежать от них, когда вы их назначаете, либо можете сломать строку, если вы хотите избежать их встроенного. – Travesty3

+0

На мой взгляд, лучше избегать вещей, когда они используются в конкретном контексте, требующем экранирования. Я могу захотеть, чтобы эти данные были сохранены чистым способом для использования позже и ускользали от него при назначении средств, что невозможно без второй копии. Я решил сделать что-то в соответствии с: 'echo 'Some text', htmlspecialchars ($ somevar), 'еще текст.';' На мой взгляд, это делает более понятным, что происходит. – Brad

0

Используйте обратные косые экранировать кавычки: \»

1

Всякий раз, когда вы выводите что-то более сложное или нужны оба типа кавычек, вы должны использовать HEREDOC строку:

echo <<<HTML 

    <tr><td> $row[username] </td><td> 
    $banBool </td><td> $status </td><td> $row[full_name] 
    </td></tr> 

HTML; 

Обратите внимание, как вы можете отказаться от ключа массива цитируя здесь (ведет себя как строка с двойными кавычками).

Если вам нужно подготовить строку для использования Javascript, то дополнительно json_encode() может быть разумным.

0

Почему бы вам просто не избежать цитат?

echo "\"", '\''; // "' 

Если это не представляется возможным проверить heredoc and nowdoc синтаксиса PHP. Третий способ - закрыть блок PHP в середине IF-оператора и напрямую выводить HTML-код.

О, вы также можете использовать output-buffering :-)

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