htmlentities () против htmlspecialchars ()

519
задан Peter Mortensen 8 September 2013 в 11:02
поделиться

5 ответов

Из документации PHP для htmlentities:

Эта функция идентична htmlspecialchars() во всех отношениях, кроме с htmlentities(), все символы, которые имеют эквиваленты символьной сущности HTML, переводятся в эти объекты.

Из документации PHP для htmlspecialchars:

символы Certain имеют специальное значение в HTML и должны быть представлены объектами HTML, если они должны сохранить свои значения. Эта функция возвращает строку с некоторыми из этих сделанных преобразований; сделанные переводы являются самыми полезными для повседневного веб-программирования. Если Вы требуете, чтобы вся символьная сущность HTML была переведена, используйте htmlentities() вместо этого.

различие - то, что кодируется. Выбор - все (объекты) или "специальные" символы, как амперсанд, двойные и одинарные кавычки, меньше, чем, и больше, чем (specialchars).

я предпочитаю использовать htmlspecialchars, когда это возможно.

, Например:

    echo htmlentities('<Il était une fois un être>.');
    // Output: &lt;Il &eacute;tait une fois un &ecirc;tre&gt;.
    //                ^^^^^^^^                 ^^^^^^^

    echo htmlspecialchars('<Il était une fois un être>.');
    // Output: &lt;Il était une fois un être&gt;.
    //                ^                 ^
323
ответ дан Mateusz Konieczny 8 September 2013 в 11:02
поделиться

Вы, вероятно, хотите использовать некоторую кодировку символов Unicode, например UTF-8 и htmlspecialchars. Поскольку нет никакой потребность генерировать "объекты HTML" для "всех применимых символов" (именно это htmlentities делает согласно документации), если это уже находится в Вашем наборе символов.

6
ответ дан Peter Mortensen 8 September 2013 в 11:02
поделиться

Потому что:

  • Иногда вы пишете XML-данные и не можете использовать объекты HTML в XML-файле.
  • Поскольку htmlentities заменяет больше символов, чем htmlspecialchars. В этом нет необходимости, поскольку PHP-скрипт становится менее эффективным, а результирующий HTML-код — менее читаемым.

htmlentities необходим только в том случае, если ваши страницы используют такие кодировки, как ASCII или LATIN-1 вместо UTF-8, и вы обрабатываете данные в кодировке, отличной от кодировки страницы.

93
ответ дан 22 November 2019 в 22:27
поделиться

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

11
ответ дан 22 November 2019 в 22:27
поделиться

htmlspecialchars можно использовать:

  1. Когда нет необходимости кодировать все символы, которые имеют эквиваленты в HTML.

    Если вы знаете, что кодировка страницы соответствует специальным символам текста, зачем вам использовать htmlentities? htmlspecialchars очень прост и требует меньше кода для отправки клиенту.

    Например:

     echo htmlentities('.');
    // Вывод: .
    // ^^^^^^^^ ^^^^^^^
    echo htmlspecialchars('.');
    // Вывод: .
    // ^ ^
     

    Второй короче и не вызывает проблем, если установлена ​​кодировка ISO-8859-1.

  2. Когда данные будут обрабатываться не только через браузер (чтобы избежать декодирования HTML-сущностей),

  3. Если на выходе будет XML (см. ответ Artefacto).

371
ответ дан 22 November 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: