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

Вы должны использовать htmlspecialchars, а не htmlentities. конечно, пока вы реализуете utf-8.

levhita 17.10.2008 18:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
3 818
7

Ответы 7

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

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

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

+ - это не оператор concat в PHP, это.

eyelidlessness 16.10.2008 20:10

должно быть: значение = \ "". htmlentities ($ row [телефон]). "\"

Joe Lencioni 16.10.2008 20:10

изменилось ... прошло много времени с тех пор, как я использовал настоящий PHP :)

workmad3 16.10.2008 20:12

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

Тем не мение...

<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>

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

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

Прежде всего, не выводите 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>

Его HTML-код находится внутри строки PHP, поэтому теги не работают. Кроме того, использование коротких тегов ("<? =?>") - плохая идея, поскольку они должны быть включены в php.ini, к которому у вас может не быть доступа.

Lucas Oman 16.10.2008 20:11

Верно, я удалил короткие теги. Однако не следует помещать разметку в строку, обратите на это внимание.

eyelidlessness 16.10.2008 20:13

Конечно, его HTML внутри тегов PHP будет работать, потому что у него есть эхо.

Darryl Hein 16.10.2008 20:51

@ 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>';

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

<?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>";
?>

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

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

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

htmlspecialchars($row[telephone], ENT_QUOTES);

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

Я согласен, нужен только htmlspecialchars. конечно, я надеюсь, что вы тоже реализуете utf-8.

levhita 17.10.2008 18:57

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

Другие вопросы по теме