Использование htmlentities в строке - PullRequest
1 голос
/ 16 октября 2008

Я знаю, что должен использовать 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)" в форме? Что я сделал не так, пожалуйста?

Ответы [ 7 ]

5 голосов
/ 16 октября 2008

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

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

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

3 голосов
/ 16 октября 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>

... будет чище.

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

1 голос
/ 30 сентября 2012

Если вы хотите объединить большой раздел переменных 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 не следует обрабатывать очень большими кусками из-за повышенного риска возникновения неприятных ошибок. Кроме того, вы можете повторить себя без необходимости.

1 голос
/ 17 октября 2008

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

htmlspecialchars($row[telephone], ENT_QUOTES);

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

1 голос
/ 16 октября 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>";
?>

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

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

1 голос
/ 16 октября 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>';
0 голосов
/ 16 октября 2008

Прежде всего, не отображайте ваш 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>
...