Skip to content

Instantly share code, notes, and snippets.

@JamoCA
Last active April 30, 2020 16:31
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save JamoCA/b96b094c1725706e02e7dd2f6c1bb855 to your computer and use it in GitHub Desktop.
Save JamoCA/b96b094c1725706e02e7dd2f6c1bb855 to your computer and use it in GitHub Desktop.
ColdFusion encodeCharacters UDF to encode characters to/from HTML Entities or UTF-8. Optionally strips high ASCII characters (enabled by default).
<cfscript>
/* encodeCharacters 6/9/2016
Converts character to/from HTML encoded entities and utf8 characters.
@param str A string
@param str conversionto (utf8, html or xml)
@param boolean stripHighASCII (default:1) option to strip all high ASCII characters
@return A string with characters replaced with either HTML entities or UTF-8 characters
Usage: encodeCharacters("Descripción: Esta promoción es única", "html");
Usage: encodeCharacters("Descripci&oacute;n: Esta promoci&oacute;n es &uacute;nica");
Based on http://cflib.org/udf/htmlEntityToUTF8 Rewritten to allow 2way conversion
*/
function encodeCharacters(str){
var conversionTo = "utf8"; /* utf8, html, xml */
var stripHighASCII = 1;
var result = arguments.str;
var symbol = "";
var symbols = [[145,"lsquo"], [146,"rsquo"], [147,"ldquo"], [148,"rdquo"], [150,"ndash"], [151,"mdash"], [160,"nbsp"], [161,"iexcl"], [162,"cent"], [163,"pound"], [164,"curren"], [165,"yen"], [166,"brvbar"], [167,"sect"], [168,"uml"], [169,"copy"], [170,"ordf"], [171,"laquo"], [172,"not"], [173,"shy"], [174,"reg"], [175,"macr"], [176,"deg"], [177,"plusmn"], [178,"sup2"], [179,"sup3"], [180,"acute"], [181,"micro"], [182,"para"], [183,"middot"], [184,"cedil"], [185,"sup1"], [186,"ordm"], [187,"raquo"], [188,"frac14"], [189,"frac12"], [190,"frac34"], [191,"iquest"], [192,"Agrave"], [193,"Aacute"], [194,"Acirc"], [195,"Atilde"], [196,"Auml"], [197,"Aring"], [198,"AElig"], [199,"Ccedil"], [200,"Egrave"], [201,"Eacute"], [202,"Ecirc"], [203,"Euml"], [204,"Igrave"], [205,"Iacute"], [206,"Icirc"], [207,"Iuml"], [208,"ETH"], [209,"Ntilde"], [210,"Ograve"], [211,"Oacute"], [212,"Ocirc"], [213,"Otilde"], [214,"Ouml"], [215,"times"], [216,"Oslash"], [217,"Ugrave"], [218,"Uacute"], [219,"Ucirc"], [220,"Uuml"], [221,"Yacute"], [222,"THORN"], [223,"szlig"], [224,"agrave"], [225,"aacute"], [226,"acirc"], [227,"atilde"], [228,"auml"], [229,"aring"], [230,"aelig"], [231,"ccedil"], [232,"egrave"], [233,"eacute"], [234,"ecirc"], [235,"euml"], [236,"igrave"], [237,"iacute"], [238,"icirc"], [239,"iuml"], [240,"eth"], [241,"ntilde"], [242,"ograve"], [243,"oacute"], [244,"ocirc"], [245,"otilde"], [246,"ouml"], [247,"divide"], [248,"oslash"], [249,"ugrave"], [250,"uacute"], [251,"ucirc"], [252,"uuml"], [253,"yacute"], [254,"thorn"], [255,"yuml"], [402,"fnof"], [913,"Alpha"], [914,"Beta"], [915,"Gamma"], [916,"Delta"], [917,"Epsilon"], [918,"Zeta"], [919,"Eta"], [920,"Theta"], [921,"Iota"], [922,"Kappa"], [923,"Lambda"], [924,"Mu"], [925,"Nu"], [926,"Xi"], [927,"Omicron"], [928,"Pi"], [929,"Rho"], [931,"Sigma"], [932,"Tau"], [933,"Upsilon"], [934,"Phi"], [935,"Chi"], [936,"Psi"], [937,"Omega"], [945,"alpha"], [946,"beta"], [947,"gamma"], [948,"delta"], [949,"epsilon"], [950,"zeta"], [951,"eta"], [952,"theta"], [953,"iota"], [954,"kappa"], [955,"lambda"], [956,"mu"], [957,"nu"], [958,"xi"], [959,"omicron"], [960,"pi"], [961,"rho"], [962,"sigmaf"], [963,"sigma"], [964,"tau"], [965,"upsilon"], [966,"phi"], [967,"chi"], [968,"psi"], [969,"omega"], [977,"thetasym"], [978,"upsih"], [982,"piv"], [8226,"bull"], [8230,"hellip"], [8242,"prime"], [8243,"Prime"], [8254,"oline"], [8260,"frasl"], [8472,"weierp"], [8465,"image"], [8476,"real"], [8482,"trade"], [8501,"alefsym"], [8592,"larr"], [8593,"uarr"], [8594,"rarr"], [8595,"darr"], [8596,"harr"], [8629,"crarr"], [8656,"lArr"], [8657,"uArr"], [8658,"rArr"], [8659,"dArr"], [8660,"hArr"], [8704,"forall"], [8706,"part"], [8707,"exist"], [8709,"empty"], [8711,"nabla"], [8712,"isin"], [8713,"notin"], [8715,"ni"], [8719,"prod"], [8721,"sum"], [8722,"minus"], [8727,"lowast"], [8730,"radic"], [8733,"prop"], [8734,"infin"], [8736,"ang"], [8743,"and"], [8744,"or"], [8745,"cap"], [8746,"cup"], [8747,"int"], [8756,"there4"], [8764,"sim"], [8773,"cong"], [8776,"asymp"], [8800,"ne"], [8801,"equiv"], [8804,"le"], [8805,"ge"], [8834,"sub"], [8835,"sup"], [8836,"nsub"], [8838,"sube"], [8839,"supe"], [8853,"oplus"], [8855,"otimes"], [8869,"perp"], [8901,"sdot"], [8968,"lceil"], [8969,"rceil"], [8970,"lfloor"], [8971,"rfloor"], [9001,"lang"], [9002,"rang"], [9674,"loz"], [9824,"spades"], [9827,"clubs"], [9829,"hearts"], [9830,"diams"], [338,"OElig"], [339,"oelig"], [352,"Scaron"], [353,"scaron"], [376,"Yuml"], [710,"circ"], [732,"tilde"], [8194,"ensp"], [8195,"emsp"], [8201,"thinsp"], [8204,"zwnj"], [8205,"zwj"], [8206,"lrm"], [8207,"rlm"], [8211,"ndash"], [8212,"mdash"], [8216,"lsquo"], [8217,"rsquo"], [8218,"sbquo"], [8220,"ldquo"], [8221,"rdquo"], [8222,"bdquo"], [8224,"dagger"], [8225,"Dagger"], [8240,"permil"], [8249,"lsaquo"], [8250,"rsaquo"], [8364,"euro"], [9702,"middot"], [8729,"middot"], [8227,"middot"], [8259,"middot"]];
if(arrayLen(arguments) GTE 2) conversionTo = arguments[2];
if(arrayLen(arguments) GTE 3 AND isValid("boolean", arguments[3])) stripHighASCII = arguments[3];
if (NOT isSimplevalue(result)) result = "INVALID INPUT";
if (conversionTo IS "xml"){
conversionTo = "html";
stripHighASCII = 1;
arrayAppend(symbols, [60,"lt"]);
arrayAppend(symbols, [62,"gt"]);
}
if (conversionTo IS "html"){
for (symbol in symbols) {
result = replace(result, chr(symbol[1]), "&#symbol[2]#;", "all");
}
} else {
arrayAppend(symbols, [39,"apos"]);
for (symbol in symbols) {
result = replace(result, "&#symbol[2]#;", chr(symbol[1]), "all");
}
}
if (yesNoFormat(stripHighASCII)){
result = reReplace(result, "[^\t\n\r\x20-\x7E]", "", "all");
}
return result;
}
</cfscript>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment