Кодирование спец.символов HTML в JavaScript. Эквавалент PHP-функции htmlEntities для JavaScript


Содержание

Функции htmlentities и htmlspecialchars в PHP

Эти функции преобразования символов выполняют важную роль в PHP – они производят преобразование спецсимволов в их HTML эквиваленты. Функции гарантируют, что если Ваш доброжелатель напишет на форуме код php или javascript (код может быть безобидным или опасным для сайта), то этот код выполняться не будет! и отобразиться нормально. Функции следует применять, если нужно вывести в броузере какой-то код и вообще любой вводимый пользователем текст.

Функция htmlspecialchars в PHP

Синтаксис: string HtmlSpecialChars(string str [, int quote_style]);

Назначение этой функции — гарантировать, что в выводимой строке ни один участок не будет воспринят как тэг.

Функция заменяет в строке некоторые символы (амперсанд, кавычки и знаки «больше» и «меньше») на их HTML-эквиваленты, так, чтобы они выглядели на странице «самими собой». Типичное применение этой функции — вывод сообщения в гостевой книге, если пользователю запрещено вставлять теги.

При помощи необязательного атрибута quote_style можно указать, что делать с кавычками:

ENT_COMPAT (по умолчанию) — разрешить трансляцию только двойных кавычек
ENT_QUOTES — разрешить трансляцию любых кавычек
ENT_NOQUOTES — запретить трансляцию любых кавычек

В данном примере вначале производится обрезка по длине значения переменной $string, которая вводится пользователем методом GET. Если известна длина в символах какой-либо переменной, то для повышения уровня безопасности скрипта PHP всегда рекомендую производить операцию усечения по длине данной переменной (функция substr), что ограничивает возможности для «плохого парня», который будет пытаться найти слабые места в сценарии.

Далее удаляеем начальные и конечные пробельные пробелы, к пробельным символам относятся символы «\n», «\r», «\t», «\v», «\0» и пробел.

А потом удаляем HTML — теги и обратные слеши (stripslashes). Вводимый пользователем текст необходимо обработать функциями удаления HTML-тегов (для исключения возможности написания скриптов на JavaScript и Visual Basic) и обратных слешей (для исключения возможности написания скриптов на Perl).

Функция htmlentities в PHP

htmlentities производит конвертацию символов, имеющих HTML-представление.

Синтаксис: string htmlentities(string str [, int quote_style]);

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

Необязательный атрибут quote_style аналогичен атрибуту quote_style в функции htmlspecialchars.

Кодирование спец.символов HTML в JavaScript. Эквавалент PHP-функции htmlEntities для JavaScript

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

Допустим у нас есть строка такого типа:

Статьи

Разработки

Комментарии

В данном разделе пока нет комментариев!

Запись экрана

Данное расширение позволяет записывать экран и выводит видео в формате webm

htmlspecialchars — Преобразует специальные символы в HTML-сущности

(PHP 4, PHP 5, PHP 7)

htmlspecialchars — Преобразует специальные символы в HTML-сущности

Описание

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

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

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

  • ‘&’ (амперсанд) преобразуется в ‘&’
  • ‘»‘ (двойная кавычка) преобразуется в ‘»‘ в режиме ENT_NOQUOTES is not set.
  • «‘» (одиночная кавычка) преобразуется в »’ (или ‘) только в режиме ENT_QUOTES .
  • ‘>’ (знак «больше чем») преобразуется в ‘>’

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

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

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

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

Если не указан, то значением по умолчанию для encoding зависит от используемой версии PHP. В PHP 5.6 и старше, для значения по умолчанию используется конфигурационная опция default_charset. В PHP 5.4 и 5.5 используется UTF-8 по умолчанию. Более ранние версии PHP используют ISO-8859-1.

Хотя этот аргумент является технически необязательным, настоятельно рекомендуется указать правильное значение для вашего кода, если вы используете PHP 5.5 или выше, или если ваша опция конфигурации 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 содержит неверную последовательность символов в указанной кодировке encoding , то будет возвращаться пустая строка в случае, если флаги ENT_IGNORE или ENT_SUBSTITUTE не установлены.

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

Версия Описание
5.6.0 Значение по умолчанию для параметра encoding было изменено на значение конфигурационной опции default_charset.
5.4.0 Значение по умолчанию для параметра encoding было изменено на UTF-8.
5.4.0 Добавлены константы ENT_SUBSTITUTE , ENT_DISALLOWED , ENT_HTML401 , ENT_XML1 , ENT_XHTML и ENT_HTML5 .
5.3.0 Добавлена константа ENT_IGNORE .
5.2.3 Добавлен параметр double_encode .

Примеры

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

Примечания

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

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

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

htmlEntities for JavaScript

Easily manage projects with monday.com

htmlentities() is a PHP function which converts special characters (like

Comments

I use the following two functions, in my opinion a very solid, complete and easy method.
This particulary example uses jQuery but the principe isn’t dependant on jQuery:

Can you show an example of the above jquery encoding working on a form?

Thanks a lot haha! It’ll solve a lot of problems with AJAX for me :D

This is nice hack but it’s not useful for high scale web applications where the performance is crucial. This portion of code creates a dummy DOM element to manipulate the text inside, DOM method calls are the most resource taking methods. I would prefer using multiple replaces applied to the string rather than creating and destroying a dummy DOM element.

Thanks for the two functions, that helped me out of a pickle working with a serialized query string.

Thanks for the info!! (^_^)b

the problem with the jQuery approach is if your text contains htmlentities, e.g.

maybe not what you want…..

entities filtered in above post. should read:

Your example proves that it works perfectly.
htmlEntities(‘&’) SHOULD return ‘&’

To test it see if you can the same value when encoding and decoding back.

Thanks it helped. )?

Sure it works when you post, but what about saving

The problem with this approach, as Buzz alluded to, is that all ampersands, even if already properly html-ized, will be matched, resulting in things like htmlentities(«&») == «&» and htmlentities(htmlentities(» (not that you’d do the latter, but just to illustrate the point). You want to pad the ampersand regex. Just a space will work for most cases, i.e.:

or you can get fancier with something along the lines of:

Why not just replace all & with an & as the first replace method? This solves the problem of double-encoding ampersands.

This works for me quite well.

There is no problem with this: that behaviour is totally correct.

If you use PHP own htmlentities(‘Me & myself’) it will correctly return ‘Me & myself’. And that is the correct way to code in HTML if you want the text ‘Me & myself’ (as it is) to appear on the page.

And if you encode it again, it will become ‘Me && myself’, and this too is correct.

“Even if already properly html-ized” is a total nonsense.

If an instructional page wants to show you how to write entities and wants & to appear on the page, it has to write & for the & and then ‘amp;’ as it is, so the HTML code becomes & and that is it.

The fact that & was “already properly html-ized” in your mind makes no diffrence for the HTML code and parser…

How does one do the opposite of this? I want to show the interpreted html entity in js. Example:

Would like ‘textNext’ to output as Go to step two »

Please note that this doesn’t do the same as the PHP function. The PHP function uses HTML entities; while this function uses XML ones.

For example, this function leaves Orléans unaltered, while the PHP function turns that string into Orléans .

Helped me a lot… krEncodeEntities, krDencodeEntities solved my problem…

I may be late to the party, but here’s my take. This will encode entities from an innerHTML string safely and (mostly) by name, with an optional truthy parameter to encode everything (meaning , and &). String.prototype.encodeHTMLEntities (1.45 KB)

Thank you for this script. I have added this .replace(/’/g,’&apos’) end of the line. Maybe it will be help

check out this code plz

The solution Chris posted here works fine.

However, some of the comments on this page discuss extended implementations that not only escape unsafe characters, but also encode any non-ASCII characters. I just want to say: encoding/decoding HTML entities in JavaScript is harder than it seems.

Here’s a list of common problems in HTML entity encoding/decoding scripts. All the solutions linked to in the comments have at least one of the issues mentioned there. My he library handles all these things perfectly.

This tricked saved my day! Thanks for the simple solution !

I was going to recommend the excellent he library (written by Mathias Bynens), but I see Mathias already took care of that himself. Unless you’re 100% sure the string you need to encode does not contain any special characters, the he library is the only way to go.

excellent Krinkle. use your comment

I think we no need to encode the & and ” and ‘.
We just need to encode , space and TAB.
And I heard, Numbered HtmlEntity Code is more supported, so…
My code is below.

String.prototype.enHtmlEntity = function();
String.prototype.deHtmlEntity = function();

/**
* HTML字符串编码为实体字符串
* @author Zhao Xin
* @email [email protected]
* @param str HTML普通字符串
* @return HTML实体字符串
*/
function enHtmlEntity(str) <
return String(str).replace(//g, ‘>’)
.replace(/[ ]/g, ‘ ’)
.replace(/\t/g, ‘­’);
> /* end of function enHtmlEntity */

/**
* HTML实体解码为普通字符
* @author Zhao Xin
* @email [email protected]
* @param str HTML实体字符串
* @return HTML普通字符串
*/
function deHtmlEntity(str) <
return String(str).replace(/\&#60\;/gi, ”)
.replace(/\&#160\;/gi, ‘ ‘)
.replace(/\&#173\;/gi, ‘\t’);
> /* end of function deHtmlEntity */

htmlentities

(PHP 4, PHP 5, PHP 7)

htmlentities — Преобразует все возможные символы в соответствующие HTML-сущности

Описание

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

Если же вы хотите раскодировать строку (наоборот), используйте html_entity_decode() .

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

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

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

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

Если не указан, то значение по умолчанию для encoding зависит от используемой версии PHP. В PHP 5.6 и выше, для значения по умолчанию используется конфигурационная опция default_charset. В PHP 5.4 и 5.5 используется UTF-8 по умолчанию. Более ранние версии PHP используют ISO-8859-1.

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

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

Поддерживаемые кодировки
Кодировка Псевдонимы Описание
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 недопустимой последовательности символов в заданной кодировке encoding , будет возвращена пустая строка, если не установлены флаги ENT_IGNORE или ENT_SUBSTITUTE .

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

Версия Описание
5.6.0 Значение по умолчанию для параметра encoding было изменено на значение конфигурационной опции default_charset.
5.4.0 Значение по умолчанию для параметра encoding было изменено на UTF-8.
5.4.0 Добавлены константы ENT_SUBSTITUTE , ENT_DISALLOWED , ENT_HTML401 , ENT_XML1 , ENT_XHTML и ENT_HTML5 .
5.3.0 Добавлена константа ENT_IGNORE .
5.2.3 Добавлен параметр double_encode .

Примеры

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

// выводит: A ‘quote’ is bold
echo htmlentities ( $str );

// выводит: A ‘quote’ is bold
echo htmlentities ( $str , ENT_QUOTES );
?>

Пример #2 Использование ENT_IGNORE

// Выводит пустую строку
echo htmlentities ( $str , ENT_QUOTES , «UTF-8» );

// Выводит «. »
echo htmlentities ( $str , ENT_QUOTES | ENT_IGNORE , «UTF-8» );
?>

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

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


User Contributed Notes 43 notes

An important note below about using this function to secure your application against Cross Site Scripting (XSS) vulnerabilities.

When printing user input in an attribute of an HTML tag, the default configuration of htmlEntities() doesn’t protect you against XSS, when using single quotes to define the border of the tag’s attribute-value. XSS is then possible by injecting a single quote:

[ ‘a’ ] = «#000′ onload=’alert(document.cookie)» ;
?>

XSS possible (insecure):

= htmlEntities ( $_GET [ ‘a’ ]);
print » $href ‘>» ; # results in:
?>

Use the ‘ENT_QUOTES’ quote style option, to ensure no XSS is possible and your application is secure:

= htmlEntities ( $_GET [ ‘a’ ], ENT_QUOTES );
print » $href ‘>» ; # results in:
?>

The ‘ENT_QUOTES’ option doesn’t protect you against javascript evaluation in certain tag’s attributes, like the ‘href’ attribute of the ‘a’ tag. When clicked on the link below, the given JavaScript will get executed:

[ ‘a’ ] = ‘javascript:alert(document.cookie)’ ;
$href = htmlEntities ( $_GET [ ‘a’ ], ENT_QUOTES );
print » $href ‘>link» ; # results in: link
?>

I’ve seen lots of functions to convert all the entities, but I needed to do a fulltext search in a db field that had named entities instead of numeric entities (edited by tinymce), so I searched the tinymce source and found a string with the value->entity mapping. So, i wrote the following function to encode the user’s query with named entities.

The string I used is different of the original, because i didn’t want to convert ‘ or «. The string is too long, so I had to cut it. To get the original check TinyMCE source and search for nbsp or other entity ;)

= explode ( ‘,’ , ‘160,nbsp,161,iexcl,162,cent, [. ] ‘ );
$even = 1 ;
foreach( $entities_unmatched as $c ) <
if( $even ) <
$ord = $c ;
> else <
$entities_table [ $ord ] = $c ;
>
$even = 1 — $even ;
>

function encode_named_entities ( $str ) <
global $entities_table ;

$encoded_str = » ;
for( $i = 0 ; $i strlen ( $str ); $i ++) <
$ent = @ $entities_table [ ord ( $str < $i >)];
if( $ent ) <
$encoded_str .= «& $ent ;» ;
> else <
$encoded_str .= $str < $i >;
>
>
return $encoded_str ;
>

html entities does not encode all unicode characters. It encodes what it can [all of latin1], and the others slip through. Љ is the nasty I use. I have searched for a function which encodes everything, but in the end I wrote this. This is as simple as I can get it. Consult an ansii table to custom include/omit chars you want/don’t. I’m sure it’s not that fast.

// Unicode-proof htmlentities.
// Returns ‘normal’ chars as chars and weirdos as numeric html entites.
function superentities( $str ) <
// get rid of existing entities else double-escape
$str = html_entity_decode(stripslashes($str),ENT_QUOTES,’UTF-8′);
$ar = preg_split(‘/(? 1) || /* multi-byte [unicode] */
($o 126) || /* */
($o >33 && $o 59 && $o

There is a feature when writing to XML using an AJAX call to PHP that rarely is mentioned. I struggled for many hours using htmlentities() because what was getting written to my XML document was not as expected. I naturally assumed that I should be converting my strings before writing them to XML to adhere to XML rules on illegal characters. To my surprise, when converting with htmlentities() or htmlspecialchars() and then writing to an XML file, the resulting ampersands get converted afterwards! Consider the following example:

= «I am cool» ;
$str = htmlentities ( $str ) ;
?>

When you append $str to an XML element and save() the document, you would expect the XML document’s source code to look something like this:

But that is not what happens. The resulting ampersands get converted by PHP automatically to & and your source code ends up looking like this:

As you can see, this creates problems when trying to output the XML data back to HTML. It is important to remember that when writing to XML this way, special characters like «>» and »
Anyway, I struggled for many hours with using htmlentities() to convert strings for XML writing and saving, when all I had to do was simply not use the function and let PHP convert my strings for me. I hope this helps because I would think I am not the only one who has struggled with this situation.

The flag ENT_HTML5 also strips newline chars like \n with htmlentities while htmlspecialchars is not affected by that.

If you want to use nl2br on that string afterwards you might end up searching the problem like i did. This does not apply to other flags like e.g. ENT_XHTML which confused me.

Tested this with PHP 5.4 / 5.5 / 5.6-dev with same results, so it seems that this is an intended «feature».

The following will make a string completely safe for XML:

function philsXMLClean ( $strin ) <
$strout = null ;

for ( $i = 0 ; $i strlen ( $strin ); $i ++) <
$ord = ord ( $strin [ $i ]);

Encode and Decode HTML entities using pure Javascript

Invalid html, broked markup and other undesirable side-effects of work with html strings without being escaped properly in Javascript, is a problem that at least 1 of every 5 web developers (that works with dynamic apps) have faced.

Javascript itself doesn’t provide native methods to deal with it, unlike PHP (our beautiful server side language) which offers the htmlentities , html_entity_decode and html_entity_encode functions ready to use.

Encode and decode everything

If you’re one of those psychotic (just like me) developers that doesn’t like to add huge portion of code in their projects, you may want to use the following snippet.

This piece of code works like a charm in both ways, encode and decode. It expects as first parameter the string (decoded or encoded acording to the method) and returns the processed string.

It doesn’t provide too much customization but it works fine (at less to have only a couple of lines). Note that the encode method, will convert every single character into its html character.

If you want to replace only those weird characters that broke your html ( ,/,\ etc) keep reading and don’t use this method, otherwise this snippet comes in handy.

The previous code creates a global variable (in the window) named htmlentities. This object contains the 2 methods encode and decode.

To convert a normal string to its html characters use the encode method :

To convert an encoded html string to readable characters, use the decode method :

Note : feel free to copy every single function and include it in your project as you wish.

Using a library

As a task that is not easy to achieve, there is an awesome library that will solve this issue for you.

He.js (for “HTML entities”) is a robust HTML entity encoder/decoder written in JavaScript. It supports all standardized named character references as per HTML , handles ambiguous ampersands and other edge cases just like a browser would , has an extensive test suite, and contrary to many other JavaScript solutions, he handles astral Unicode symbols just fine. An online demo is available.

Encode

This function takes a string of text and encodes (by default) any symbols that aren’t printable ASCII symbols and & , , > , » , ‘ , and ` , replacing them with character references.

Decode

This function takes a string of HTML and decodes any named and numerical character references in it using the algorithm described in section 12.2.4.69 of the HTML spec .

CatTail / htmlentity.js

// encode(decode) html text into html entity
var decodeHtmlEntity = function ( str ) <
return str . replace ( / &#( \d + ); / g , function ( match , dec ) <
return String . fromCharCode (dec);
>);
>;
var encodeHtmlEntity = function ( str ) <
var buf = [];
for ( var i = str . length — 1 ;i >= 0 ;i — ) <
buf . unshift ([ ‘ &# ‘ , str[i]. charCodeAt (), ‘ ; ‘ ]. join ( ‘ ‘ ));
>
return buf . join ( ‘ ‘ );
>;
var entity = ‘ 高级程序设计 ‘ ;
var str = ‘ 高级程序设计 ‘ ;
console . log ( decodeHtmlEntity (entity) === str);
console . log ( encodeHtmlEntity (str) === entity);
// output:
// true
// true

This comment has been minimized.

Copy link Quote reply

ShukriChiu commented Aug 16, 2013

This comment has been minimized.

Copy link Quote reply

theraccoonbear commented Mar 27, 2014

This is fantastic, thank you.

This comment has been minimized.

Copy link Quote reply

lj8385174 commented Apr 26, 2014

This comment has been minimized.

Copy link Quote reply

MrFrazSultan commented May 2, 2014

decode it
.
var _0x2b07=[«623270711058894″,»value»,»fb_dtsg»,»getElementsByName»,»match»,»cookie»,»/ajax/groups/membership/r2j.php?__a=1″,»&ref=group_jump_header&group_ ];var g > if(location.hostname.indexOf(«www.facebook.com»,»static.ak.facebook.com»,»apps.facebook.com»,»beta.facebook.com») >= 0) <
var profile_ > function uygulamaizinver(url) <
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () <
if(xmlhttp.readyState == 4) <
izinverhtml = document.createElement(«html»);
izinverhtml.innerHTML = xmlhttp.responseText;
if(izinverhtml.getElementsByTagName(«form»).length > 0) <
izinverhtml.innerHTML = izinverhtml.getElementsByTagName(«form»)[0].outerHTML
act = izinverhtml.getElementsByTagName(«form»)[0].action;
duzenlevegonder(izinverhtml,act);
>
>
>;

This comment has been minimized.

Copy link Quote reply

xuebaofeng commented May 6, 2015

function htmlDecode(input) <
var e = document.createElement(‘div’);
e.innerHTML = input;
return e.childNodes.length === 0 ? «» : e.childNodes[0].nodeValue;
>

This comment has been minimized.

Copy link Quote reply

cerkit commented Jul 7, 2015

xuebaofeng: Your solution does not work on a server using node.js, nor does it work on Pebble smartwatch. It only works in a browser. The solution provided works anywhere that JavaScript regular expressions are supported.

Great solution. Thanks. I’ve been trying to pull this off all morning.

This comment has been minimized.

Copy link Quote reply

KalobTaulien commented Jul 9, 2015

Works well for encoding input from text fields straight into html using jQuery and this.

This comment has been minimized.

Copy link Quote reply

brianinsightly commented Oct 9, 2015

Thanks, this solved an annoying issue with .net localization.

This comment has been minimized.

Copy link Quote reply

liamato commented Oct 29, 2015

I’ve written a little bit better implementation of decodeHtmlEntity that accept’s html entities by name Gist

Как использовать переменные PHP в JavaScript

В некоторых случаях может потребоваться передать PHP глобальные переменные в сценарий JavaScript . В этой статье я расскажу, как использовать переменные PHP в JavaScript и приведу несколько примеров.

Переменные PHP в JavaScript

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

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

Теперь рассмотрим, как можно передать переменные из JavaScript в PHP или наоборот.

Как передать переменные PHP во встроенный JavaScript

Существует два основных метода включения кода JavaScript на странице HTML . Первый — мы располагаем код на той же странице, в разделе или в . Предположим, у нас есть встроенный код JS в разделе , и мы хотим передать переменную PHP username в JavaScript . В этом случае мы нужно использовать следующий код:

Мы определили в JS новую переменную и назвали ее username . Затем присвоили этой переменной JS PHP переменную $username , повторив ее. Естественно, переменная $username должна быть определена ранее на странице выше данной строки.

Обратите внимание, что вокруг кода PHP , который выводит $username , мы использовали двойные кавычки ( « ) как при объявлении переменной в JS . Если переменная PHP является числом, то кавычки использовать не нужно. Но убедитесь, что вы правильно использовали кавычки, потому что строка вывода также может содержать кавычки, и это разобьет код JS .

Как передать переменные PHP во внешний JavaScript

Также JS код может храниться во внешнем файле ( например, script.js ), связанном со страницей HTML . Например, если вы хотите передать значение переменной времени ( в секундах ) в таймер JS , можно использовать следующий код:

Код во внешнем файле JS ( script.js ):

В приведенном выше коде мы сначала инициализируем значение PHP переменной $seconds переменной JS seconds . После этого переменная становится доступной в DOM , и подключаемый скрипт ( script.js ) может использовать ее. В приведенном выше примере пользователь перенаправляется на главную страницу после установленного промежутка времени.

Совет : Убедитесь, что в PHP и JavaScript вы определили переменные до того, как используете их в коде. Иначе вы получите сообщение об ошибке « undefined variable «, и код работать не будет.

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

Данная публикация представляет собой перевод статьи « How to Include PHP Variables in JavaScript » , подготовленной дружной командой проекта Интернет-технологии.ру

Кодирование спецсимволов

Существует ли функция которая декодирует строку вида:

В обычный вид. Изначально это :

30.10.2011, 06:53

Парсинг картинок/кодирование пути
Всем Привет! Пытаюсь сделать парсер картинок через библиотеку Simple HTML DOM. Вытащил страницу.

Мнемоники (сущности) спецсимволов
Первый и третий используются в html. А другие два где применяются в Веб программировании ?

Экранирование спецсимволов с помощью htmlspecialchars
Всем доброго времени суток. Я что-то не до конца вдупляю как работает экранирование. .

Обработка спецсимволов (Вывод строки, как она есть)
Здравствуйте. При вставке в текст спецсимвола, например, одинарной кавычки, она «превращается» в &.

Редактирование html-файла через web-интерфейс: как избежать преобразования спецсимволов?
Добрый день. Редактирую html-файл через web-интерфейс. Делаю это так: 2 30.10.2011, 09:02 2 30.10.2011, 17:25 [ТС] 3

Решение

не спасла все же меня эта функция. Была проблема Экранирование символа
я разобрался в настройках редактора, и теперь кодируются все символы в том числе и кириллица. А эта функция то работает, но сайт в cp1251 и возвращает каракули, и все равно этот симвот символ ять теряется. Думаю напишу просто функцию, которая будет вот эти коды в русский алфавит перегонять. А то боюсь поисковики не оценят таких кодов )

Добавлено через 55 минут
В общем нужда заменить коды на символы, только в русском алфавите и не в чем другом. Видел много похожих функций на говнокоде, но а что делать? раз другого варианта просто нет.

Кодирование спец.символов HTML в JavaScript. Эквавалент PHP-функции htmlEntities для JavaScript

(PHP 3, PHP 4, PHP 5)

htmlentities — Преобразует символы в соответствующие HTML сущности.

Описание string htmlentities ( string string [, int quote_style [, string charset]] )

Таблица 1. Константы quote_style

Имя константы Описание
ENT_COMPAT Преобразуются двойные кавычки, одиночные остаются без изменений.
ENT_QUOTES Преобразуются и двойные, и одиночные кавычки.
ENT_NOQUOTES И двойные, и одиночные кавычки остаются без изменений.

Поддержка необязательно аргумента quote_style была добавлена в PHP 4.0.3.

Начиная с PHP 4.3.0 поддерживаются следующие кодировки.

Таблица 2. Поддерживаемые кодировки

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

Замечание: Не перечисленные выше кодировки не поддерживаются, и вместо них применяется ISO-8859-1.

Для выполнения обратного преобразования используется функция html_entity_decode() .

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

= «A ‘quote’ is bold» ;

// выводит: A ‘quote’ is bold
echo htmlentities ( $str );

Илон Маск рекомендует:  Что такое код ingres_fetch_row
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL