Перейти к содержимому

Как закомментировать строки в php

  • автор:

Как правильно закомментировать код в HTML, XML, CSS, PHP, JavaScript

Это может быть удобно, потому что Есть моменты, когда вы можете временно написать комментарий к коду или закомментировать сам код, но оставить его там что бы использовать его позже. По сути это скрывает код пока вы не удалите комментарий кода.

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

Чтобы закомментировать HTML:

the redblock class.

—>

Быстрое комментирование строки

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

Отслеживать
задан 26 июн 2018 в 13:01
23 2 2 бронзовых знака
26 июн 2018 в 14:29

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

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

function! GetCommentStyleByFileType() let file_name = buffer_name('%') if file_name =~ '\(\.\|_\)vim' return ["\"", ''] elseif file_name =~ '\.\(bat\|cmd\)' return ['::', ''] elseif file_name =~ '\.\(c\|cpp\|cs\|js\|php\)' return ['//', ''] elseif file_name =~ '\.\(ht\|x\)ml$' return [''] elseif file_name =~ '\.\(lua\|sql\)' return ['--', ''] elseif file_name =~ '\.\(vb\|vbs\)' return ["'", ''] endif return ['#', ''] endfunction au BufEnter * let b:comment = GetCommentStyleByFileType() function! CommentLine() let stsymbol = b:comment[0] let endsymbol = b:comment[1] exe ":sil! norm 0i" . stsymbol . "\A" . endsymbol . "\" endfunction function! UnCommentLine() let file_name = buffer_name('%') let stsymbol = b:comment[0] if file_name =~ '\.\(c\|cpp\|cs\|js\|php\)' let stsymbol = '\/\/' endif let endsymbol = b:comment[1] exe ":sil! norm :s/^\s*" . stsymbol . "//\" exe ":sil! norm :s/\s*" . endsymbol . "\s*$//\" endfunction exe "set =\ec" nnoremap :call CommentLine() inoremap :call CommentLine()i vmap :call CommentLine() exe "set =\eu" nnoremap :call UnCommentLine() inoremap :call UnCommentLine()i vmap :call UnCommentLine()

Так, чтобы закомментировать строку нужно нажать Alt+C , чтобы снять комментирование со строки — Alt+U . Можно забиндить на другое сочетание клавиш, использование Alt+некая_клавиша здесь для примера, ровно как и сами функции, — поэкспериментируйте, возможно сделаете нечто удобное и полезное не только для себя.

htmlspecialchars

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

Если входная строка, переданная в эту функцию и результирующий документ используют одинаковую кодировку символов, то этой функции достаточно, чтобы подготовить данные для вставки в большинство частей HTML-документа. Однако, если данные содержат символы, не определённые в кодировке символов результирующего документа и вы ожидаете сохранения этих символов (как числовые или именованные сущности), то вам недостаточно будет этой и htmlentities() функций (которые только преобразуют подстроки с соответствующими сущностями). Необходимо использовать функцию mb_encode_numericentity() .

Производятся следующие преобразования

Символ Замена
& (амперсанд) &
» (двойные кавычки) " , если не установлена ENT_NOQUOTES
‘ (одинарные кавычки) ' (для ENT_HTML401 ) или ' (для ENT_XML1 , ENT_XHTML или ENT_HTML5 ), но только если установлена ENT_QUOTES
< (меньше) <
> (больше) >

Список параметров

Конвертируемая строка ( string ).

Битовая маска из нижеуказанных флагов, определяющих режим обработки кавычек, некорректных кодовых последовательностей и используемый тип документа. По умолчанию используется ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 .

Доступные значения параметра flags

Название константы Описание
ENT_COMPAT Преобразует двойные кавычки, одинарные кавычки не изменяются.
ENT_QUOTES Преобразует как двойные, так и одинарные кавычки.
ENT_NOQUOTES Оставляет без изменения как двойные, так и одинарные кавычки.
ENT_IGNORE Без всяких уведомительных сообщений отбрасывает некорректные кодовые последовательности вместо возврата пустой строки. Использование этого флага не рекомендуется, так как это может привести к » негативным последствиям, связанным с безопасностью.
ENT_SUBSTITUTE Заменяет некорректные кодовые последовательности символом замены Юникода U+FFFD в случае использования UTF-8 или � при использовании другой кодировки, вместо возврата пустой строки.
ENT_DISALLOWED Заменяет неверные коды символов для заданного типа документа символом замены юникода U+FFFD (UTF-8) или � (при использовании другой кодировки) вместо того, чтобы оставлять все как есть. Это может быть полезно, например, для того, чтобы убедиться в формальной правильности XML-документов со встроенным внешним контентом.
ENT_HTML401 Обработка кода в соответствии с HTML 4.01.
ENT_XML1 Обработка кода в соответствии с XML 1.
ENT_XHTML Обработка кода в соответствии с XHTML.
ENT_HTML5 Обработка кода в соответствии с HTML 5.

Необязательный аргумент, определяющий кодировку, используемую при конвертации символов.

Если не указан, то значение по умолчанию для encoding зависит от конфигурационной опции default_charset.

Хотя этот аргумент является технически необязательным, настоятельно рекомендуется указать правильное значение для вашего кода, опция конфигурации default_charset может быть задана неверно для входных данных.

Для целей этой функции кодировки ISO-8859-1 , ISO-8859-15 , UTF-8 , cp866 , cp1251 , cp1252 и KOI8-R являются практически эквивалентными, предполагая то, что сама строка string содержит корректные символы в указанной кодировке, то символы, изменяемые htmlspecialchars() , останутся на тех же местах во всех этих кодировках.

Поддерживаются следующие кодировки:

Поддерживаемые кодировки

Кодировка Псевдонимы Описание
ISO-8859-1 ISO8859-1 Западно-европейская Latin-1.
ISO-8859-5 ISO8859-5 Редко используемая кириллическая кодировка (Latin/Cyrillic).
ISO-8859-15 ISO8859-15 Западно-европейская Latin-9. Добавляет знак евро, французские и финские буквы к кодировке Latin-1 (ISO-8859-1).
UTF-8 8-битная Unicode, совместимая с ASCII.
cp866 ibm866, 866 Кириллическая кодировка, применяемая в DOS.
cp1251 Windows-1251, win-1251, 1251 Кириллическая кодировка, применяемая в Windows.
cp1252 Windows-1252, 1252 Западно-европейская кодировка, применяемая в Windows.
KOI8-R koi8-ru, koi8r Русская кодировка.
BIG5 950 Традиционный китайский, применяется в основном на Тайване.
GB2312 936 Упрощённый китайский, стандартная национальная кодировка.
BIG5-HKSCS Расширенная Big5, применяемая в Гонконге.
Shift_JIS SJIS, SJIS-win, cp932, 932 Японская кодировка.
EUC-JP EUCJP, eucJP-win Японская кодировка.
MacRoman Кодировка, используемая в Mac OS.
» Пустая строка активирует режим определения кодировки из файла скрипта (Zend multibyte), default_charset и текущей локали (смотрите nl_langinfo() и setlocale() ) в указанном порядке. Не рекомендуется к использованию.

Замечание: Остальные кодировки не поддерживаются, вместо них будет применена кодировка по умолчанию и сгенерировано предупреждение.

Если параметр double_encode выключен, то PHP не будет преобразовывать существующие html-сущности. По умолчанию преобразуется все без ограничений.

Возвращаемые значения

Преобразованная строка ( string ).

Если входная строка string содержит неверную последовательность символов в указанной кодировке encoding , то будет возвращаться пустая строка в случае, если флаги ENT_IGNORE или ENT_SUBSTITUTE не установлены.

Список изменений

Версия Описание
8.1.0 Значение по умолчанию параметра flags изменено с ENT_COMPAT на ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 .

Примеры

Пример #1 Пример использования htmlspecialchars()

Примечания

Замечание:

Обратите внимание, что функция не производит других преобразований, кроме описанных выше. Для преобразования всех HTML-сущностей используйте htmlentities() .

  • Если одновременно отсутствуют константы ENT_COMPAT , ENT_QUOTES и ENT_NOQUOTES , по умолчанию будет использоваться ENT_NOQUOTES .
  • Если одновременно присутствуют две или более констант ENT_COMPAT , ENT_QUOTES и ENT_NOQUOTES , ENT_QUOTES будет иметь больший приоритет. Следующая по приоритету будет ENT_COMPAT .
  • Если нет ни одной из констант ENT_HTML401 , ENT_HTML5 , ENT_XHTML и ENT_XML1 , по умолчанию будет использоваться ENT_HTML401 .
  • Если одновременно присутствуют две или более констант ENT_HTML401 , ENT_HTML5 , ENT_XHTML , ENT_XML1 , то приоритет будет таким: ENT_HTML5 , потом ENT_XHTML , ENT_XML1 , а потом ENT_HTML401 .
  • Если одновременно присутствуют две или более констант ENT_DISALLOWED , ENT_IGNORE , ENT_SUBSTITUTE , высшим приоритетом будет обладать ENT_IGNORE , а следующая за ней ENT_SUBSTITUTE .

Смотрите также

  • get_html_translation_table() — Возвращает таблицу преобразований, используемую функциями htmlspecialchars и htmlentities
  • htmlspecialchars_decode() — Преобразует специальные HTML-сущности обратно в соответствующие символы
  • strip_tags() — Удаляет теги HTML и PHP из строки
  • htmlentities() — Преобразует все возможные символы в соответствующие HTML-сущности
  • nl2br() — Вставляет HTML-код разрыва строки перед каждым переводом строки

User Contributed Notes 21 notes

10 years ago

As of PHP 5.4 they changed default encoding from «ISO-8859-1» to «UTF-8». So if you get null from htmlspecialchars or htmlentities

where you have only set
echo htmlspecialchars ( $string );
echo htmlentities ( $string );
?>

you can fix it by
echo htmlspecialchars ( $string , ENT_COMPAT , ‘ISO-8859-1’ , true );
echo htmlentities ( $string , ENT_COMPAT , ‘ISO-8859-1’ , true );
?>

On linux you can find the scripts you need to fix by

grep -Rl «htmlspecialchars\\|htmlentities» /path/to/php/scripts/

10 years ago

Unfortunately, as far as I can tell, the PHP devs did not provide ANY way to set the default encoding used by htmlspecialchars() or htmlentities(), even though they changed the default encoding in PHP 5.4 (*golf clap for PHP devs*). To save someone the time of trying it, this does not work:

ini_set ( ‘default_charset’ , $charset ); // doesn’t work.
?>

Unfortunately, the only way to not have to explicitly provide the second and third parameter every single time this function is called (which gets extremely tedious) is to write your own function as a wrapper:

define ( ‘CHARSET’ , ‘ISO-8859-1’ );
define ( ‘REPLACE_FLAGS’ , ENT_COMPAT | ENT_XHTML );

function html ( $string ) return htmlspecialchars ( $string , REPLACE_FLAGS , CHARSET );
>

echo html ( «ñ» ); // works
?>

You can do the same for htmlentities()

1 year ago

Because the documentation says

int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401

you would think that ENT_HTML401 is important. But as the notes mention, ENT_HTML401 is the default if you don’t specify the doc type. This is because ENT_HTML401 === 0. So

int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401

is exactly equivalent to

int $flags = ENT_QUOTES | ENT_SUBSTITUTE

15 years ago

if your goal is just to protect your page from Cross Site Scripting (XSS) attack, or just to show HTML tags on a web page (showing on the page, for example), then using htmlspecialchars() is good enough and better than using htmlentities(). A minor point is htmlspecialchars() is faster than htmlentities(). A more important point is, when we use htmlspecialchars($s) in our code, it is automatically compatible with UTF-8 string. Otherwise, if we use htmlentities($s), and there happens to be foreign characters in the string $s in UTF-8 encoding, then htmlentities() is going to mess it up, as it modifies the byte 0x80 to 0xFF in the string to entities like é. (unless you specifically provide a second argument and a third argument to htmlentities(), with the third argument being «UTF-8»).

The reason htmlspecialchars($s) already works with UTF-8 string is that, it changes bytes that are in the range 0x00 to 0x7F to < etc, while leaving bytes in the range 0x80 to 0xFF unchanged. We may wonder whether htmlspecialchars() may accidentally change any byte in a 2 to 4 byte UTF-8 character to < etc. The answer is, it won’t. When a UTF-8 character is 2 to 4 bytes long, all the bytes in this character is in the 0x80 to 0xFF range. None can be in the 0x00 to 0x7F range. When a UTF-8 character is 1 byte long, it is just the same as ASCII, which is 7 bit, from 0x00 to 0x7F. As a result, when a UTF-8 character is 1 byte long, htmlspecialchars($s) will do its job, and when the UTF-8 character is 2 to 4 bytes long, htmlspecialchars($s) will just pass those bytes unchanged. So htmlspecialchars($s) will do the same job no matter whether $s is in ASCII, ISO-8859-1 (Latin-1), or UTF-8.

12 years ago

i searched for a while for a script, that could see the difference between an html tag and just < and >placed in the text,
the reason is that i recieve text from a database,
wich is inserted by an html form, and contains text and html tags,
the text can contain < and >, so does the tags,
with htmlspecialchars you can validate your text to XHTML,
but you’ll also change the tags, like to <b>,
so i needed a script that could see the difference between those two.
but i couldn’t find one so i made my own one,
i havent fully tested it, but the parts i tested worked perfect!
just for people that were searching for something like this,
it may looks big, could be done easier, but it works for me, so im happy.

function fixtags ( $text ) $text = htmlspecialchars ( $text );
$text = preg_replace ( «/=/» , «=\»\»» , $text );
$text = preg_replace ( «/"/» , «"\»» , $text );
$tags = «/<(\/|)(\w*)(\ |)(\w*)([\\\=]*)(?|(\»)\»"\»|)(?|(.*)?"(\»)|)([\ ]?)(\/|)>/i» ;
$replacement = «» ;
$text = preg_replace ( $tags , $replacement , $text );
$text = preg_replace ( «/=\»\»/» , » keyword»>, $text );
return $text ;
>
?>

an example:

Что значит раскомментировать строки?

1.
Находим ;extension=php_curl.dll и убираем ; перед названием функции.

2.
Находим ;extension=php_mbstring.dll и убираем ; перед названием функции.

Т. е. раскомментировали
строки.

Лучший ответ
Снять (удалить) признак комментария с указанной строки. Что проще?
Остальные ответы
Сам спросил, сам ответил. Непонятно только зачем спрашивал, если в инструкции все и написано.
«Убираем ; перед названием функции» — это не есть ответ на твой вопрос, случайно, не?

закомментировать строки — означает сделать их неисполняемыми для компилятора. Другими словами — неактивными.
Программистам они нужны при отладке программы (отключать куски кода) , для пояснений, заметок, комментариев и т. д.
Убирая спецсимвол — делаешь строки активными, если в двух словах. Это и называется — раскомментировать.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *