PHP's htmlentities in TypeScript

✓ Verified: PHP 8.3
Examples tested against actual runtime. CI re-verifies continuously. Only documented examples are tested.

How to use

Install via yarn add locutus and import: import { htmlentities } from 'locutus/php/strings/htmlentities'.

Or with CommonJS: const { htmlentities } = require('locutus/php/strings/htmlentities')

Use a bundler that supports tree-shaking so you only ship the functions you actually use. Vite, webpack, Rollup, and Parcel all handle this. For server-side use this is less of a concern.

Examples

These examples are extracted from test cases that automatically verify our functions against their native counterparts.

#codeexpected result
1htmlentities('Kevin & van Zonneveld')'Kevin & van Zonneveld'
2htmlentities("foo'bar","ENT_QUOTES")'foo'bar'

Notes

  • function is compatible with PHP 5.2 and older

Dependencies

This function uses the following Locutus functions:

Here's what our current TypeScript equivalent to PHP's htmlentities looks like.

import { get_html_translation_table as getHtmlTranslationTable } from '../strings/get_html_translation_table.ts'

export function htmlentities(
string: string,
quoteStyle?: string | number,
charset?: string,
doubleEncode?: boolean | null,
): string {
// discuss at: https://locutus.io/php/htmlentities/
// parity verified: PHP 8.3
// original by: Kevin van Zonneveld (https://kvz.io)
// revised by: Kevin van Zonneveld (https://kvz.io)
// revised by: Kevin van Zonneveld (https://kvz.io)
// improved by: nobbler
// improved by: Jack
// improved by: Rafał Kukawski (https://blog.kukawski.pl)
// improved by: Dj (https://locutus.io/php/htmlentities:425#comment_134018)
// bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)
// bugfixed by: Brett Zamir (https://brett-zamir.me)
// input by: Ratheous
// note 1: function is compatible with PHP 5.2 and older
// example 1: htmlentities('Kevin & van Zonneveld')
// returns 1: 'Kevin & van Zonneveld'
// example 2: htmlentities("foo'bar","ENT_QUOTES")
// returns 2: 'foo'bar'

const hashMap = getHtmlTranslationTable('HTML_ENTITIES', quoteStyle)

const source = string === null ? '' : string + ''

if (quoteStyle && quoteStyle === 'ENT_QUOTES') {
hashMap["'"] = '''
}

const shouldDoubleEncode = doubleEncode === null || !!doubleEncode

const regex = new RegExp(
'&(?:#\\d+|#x[\\da-f]+|[a-zA-Z][\\da-z]*);|[' +
Object.keys(hashMap)
.join('')
// replace regexp special chars
.replace(/([()[\]{}\-.*+?^$|/\\])/g, '\\$1') +
']',
'g',
)

return source.replace(regex, function (ent: string): string {
if (ent.length > 1) {
return shouldDoubleEncode ? hashMap['&'] + ent.substring(1) : ent
}

return hashMap[ent] ?? ent
})
}

Improve this function

Locutus is a community effort following The McDonald's Theory: we ship first iterations, hoping others will improve them. If you see something that could be better, we'd love your contribution.

View on GitHub · Edit on GitHub · View Raw


« More PHP strings functions


Star