Использование htmlentities в строке

Я знаю, что должен использовать htmlentities для всех полей ввода текста в форме, но это не работает:

<?php
echo "<tr>
        <td align=\"right\">".Telephone." :</td>    
        <td><input type=\"text\" name=\"telephone\" size=\"27\"
            value=\"htmlentities($row[telephone])\"> Inc. dialing codes
        </td>    
</tr>";
?>

Он просто показывает входное значение как «htmlentities (0123456789)» в форме? Что я сделал не так, пожалуйста?


person Community    schedule 16.10.2008    source источник
comment
Вы должны использовать htmlspecialchars, а не htmlentities. конечно, пока вы реализуете utf-8.   -  person levhita    schedule 17.10.2008


Ответы (7)


попробуйте использовать

value=\"" . htmlentities($row[telephone]) . "\"

там. В настоящее время ваша строка просто содержит строку htmlentities и объединяет переменную. Вам нужно получить строку, вызвать функцию и поместить ее результат на место, как указано выше.

person workmad3    schedule 16.10.2008
comment
+ не является оператором concat в PHP, это . - person eyelidlessness; 16.10.2008
comment
должно быть: значение=\ . htmlentities($row[телефон]) . \ - person Joe Lencioni; 16.10.2008
comment
изменилось... прошло некоторое время с тех пор, как я использовал настоящий PHP :) - person workmad3; 16.10.2008

Вы не можете вызвать функцию в середине строки. Вам нужно получить возвращаемое значение из вызова функции, а затем включить его в строку.

Однако...

<tr>
    <td align="right">
        <label for="telephone">Telephone:</label>
    </td>    
    <td>
        <input type="text" 
               name="telephone" 
               id="telephone"
               size="27" 
               value="<?php 
                   echo htmlentities($row[telephone]); 
               ?>"> 
        Inc. dialing codes 
    </td>
</tr>

... было бы чище.

Как и избавление от устаревшей презентационной разметки и использование таблиц для верстки.

person Quentin    schedule 16.10.2008

Это будет работать:

<?php
echo "    <tr>
                    <td align=\"right\">Telephone :</td>    
                    <td><input type=\"text\" name=\"telephone\" size=\"27\" value=\"".htmlentities($row[telephone])."\"> Inc. dialing codes</td>    
            </tr>";
?>

Кстати, я также исправил очень странный синтаксис, который у вас здесь происходит, например, когда вы объединяете константу «Телефон», которая действительно должна быть внутри строки. Такие детали важны и легко сломают ваш код.

Кроме того, я предлагаю использовать одинарные кавычки вместо двойных вокруг такой строки, чтобы вам не приходилось экранировать все двойные кавычки внутри строки.

person Lucas Oman    schedule 16.10.2008

@workmad3: это не сработает, так как он занимается PHP.

<?php echo '<tr>
                <td align="right">' . Telephone . ' :</td>    
                <td><input type="text" name="telephone" size="27" value="' . htmlentities($row[telephone]) . '" /> Inc. dialing codes</td>    
        </tr>';
person Darryl Hein    schedule 16.10.2008

если вы просто хотите сделать свой вывод безопасным в HML; Вместо этого вы должны использовать htmlspecialchars(), так как это «только» номер телефона.

htmlspecialchars($row[telephone], ENT_QUOTES);

htmlentities() немного медленнее и не так хорош с многобайтовыми символами. Но я предполагаю, что вы не добираетесь до этих проблем только на реактивном самолете.

person Martijn Gorree    schedule 16.10.2008
comment
Я согласен, что нужны только htmlspecialchars. конечно, я надеюсь, что вы тоже реализуете utf-8. - person levhita; 17.10.2008

Если вы хотите объединить большой раздел переменных HTML и PHP, вы можете сделать две вещи.

Во-первых, используйте конструкцию HEREDOC.

$txt = <<<HERETEXT
Put your HTML here.
HERETEXT;

echo $txt;

Во-вторых, используйте переменную первого класса для имени функции, а затем используйте ее в файле HEREDOC.

$he = 'htmlentities';

$txt = <<<HERETEXT
{$he($string, ENT_QUOTES, 'UTF-8')}
HERETEXT;

echo $txt;

Однако HTML не следует обрабатывать очень большими фрагментами из-за повышенного риска неприятных ошибок. Кроме того, вы можете повторяться без необходимости.

person John Fro    schedule 30.09.2012

Прежде всего, не повторяйте свой HTML в строке. Отделяйте код от разметки.

<tr>
    <td align="right">Telephone :</td>
    <td><input type="text" name="telephone" size="27"
        value="<?php echo htmlentities($row['telephone']); ?>"> Inc. dialing codes</td>
</tr>
person eyelidlessness    schedule 16.10.2008
comment
Его HTML находится внутри строки PHP, поэтому теги не будут работать. Кроме того, использование коротких тегов (‹?= ?›) — плохая идея, поскольку они должны быть включены в php.ini, к которому у вас может не быть доступа. - person Lucas Oman; 16.10.2008
comment
Правильно, я удалил короткие теги. Однако не следует помещать разметку в строку, обратите внимание на это. - person eyelidlessness; 16.10.2008
comment
Конечно, его HTML внутри тегов PHP будет работать, потому что у него есть эхо. - person Darryl Hein; 16.10.2008