locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
43 lines (42 loc) • 1.97 kB
JavaScript
import { toPhpArrayObject } from "../_helpers/_phpTypes.js";
import { get_html_translation_table as getHtmlTranslationTable } from "../strings/get_html_translation_table.js";
export function html_entity_decode(string, quoteStyle) {
// discuss at: https://locutus.io/php/html_entity_decode/
// parity verified: PHP 8.3
// original by: john (https://www.jd-tech.net)
// input by: ger
// input by: Ratheous
// input by: Nick Kolosov (https://sammy.ru)
// improved by: Kevin van Zonneveld (https://kvz.io)
// improved by: marc andreu
// revised by: Kevin van Zonneveld (https://kvz.io)
// revised by: Kevin van Zonneveld (https://kvz.io)
// bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)
// bugfixed by: Brett Zamir (https://brett-zamir.me)
// bugfixed by: Fox
// example 1: html_entity_decode('Kevin & van Zonneveld')
// returns 1: 'Kevin & van Zonneveld'
// example 2: html_entity_decode('<')
// returns 2: '<'
let tmpStr = string.toString();
const hashMapUnknown = getHtmlTranslationTable('HTML_ENTITIES', quoteStyle);
if (hashMapUnknown === false || !hashMapUnknown || typeof hashMapUnknown !== 'object') {
return false;
}
const normalizedHashMap = {};
const hashMapObject = toPhpArrayObject(hashMapUnknown);
for (const [symbol, entity] of Object.entries(hashMapObject)) {
if (typeof entity === 'string') {
normalizedHashMap[symbol] = entity;
}
}
// @todo: & problem
// https://locutus.io/php/get_html_translation_table:416#comment_97660
delete normalizedHashMap['&'];
normalizedHashMap['&'] = '&';
for (const [symbol, entity] of Object.entries(normalizedHashMap)) {
tmpStr = tmpStr.replaceAll(entity, symbol);
}
tmpStr = tmpStr.replaceAll(''', "'");
return tmpStr;
}