Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Info
titleUseful Information

After struggling with multiple non-standard ascii issues, I discovered this ColdFusion code for dealing with the issue at http://www.octadyne.com/html_entity_acsii_table.cfm. Wrapping this function around user generated text solved the invalid xml issues I was running into.

Code Block
<cfscript>
/**
 * Coverts special characters to character entities, making a string safe for display in HTML.
 * 
 * @param string 	 String to format. (Required)
 * @return Returns a string. 
 * @author Gyrus (gyrus@norlonto.net) 
 * @version 1, April 30, 2003 
 */
function HTMLSafe(string)
{
	var badChars="#chr(128)#,#chr(130)#,#chr(131)#,#chr(132)#,#chr(133)#,#chr(134)#,#chr(135)#,
#chr(136)#,#chr(137)#,#chr(138)#,#chr(139)#,#chr(140)#,#chr(142)#,#chr(145)#,#chr(146)#,#chr(147)#,
#chr(148)#,#chr(149)#,#chr(150)#,#chr(151)#,#chr(152)#,#chr(153)#,#chr(154)#,#chr(155)#,#chr(156)#,
#chr(158)#,#chr(159)#,#chr(161)#,#chr(162)#,#chr(163)#,#chr(164)#,#chr(165)#,#chr(166)#,#chr(167)#,
#chr(168)#,#chr(169)#,#chr(170)#,#chr(171)#,#chr(172)#,#chr(173)#,#chr(174)#,#chr(175)#,#chr(176)#,
#chr(177)#,#chr(178)#,#chr(179)#,#chr(180)#,#chr(181)#,#chr(182)#,#chr(183)#,#chr(184)#,#chr(185)#,
#chr(186)#,#chr(187)#,#chr(188)#,#chr(189)#,#chr(190)#,#chr(191)#,#chr(192)#,#chr(193)#,#chr(194)#,
#chr(195)#,#chr(196)#,#chr(197)#,#chr(198)#,#chr(199)#,#chr(200)#,#chr(201)#,#chr(202)#,#chr(203)#,
#chr(204)#,#chr(205)#,#chr(206)#,#chr(207)#,#chr(208)#,#chr(209)#,#chr(210)#,#chr(211)#,#chr(212)#,
#chr(213)#,#chr(214)#,#chr(215)#,#chr(216)#,#chr(217)#,#chr(218)#,#chr(219)#,#chr(220)#,#chr(221)#,
#chr(222)#,#chr(223)#,#chr(224)#,#chr(225)#,#chr(226)#,#chr(227)#,#chr(228)#,#chr(229)#,#chr(230)#,
#chr(231)#,#chr(232)#,#chr(233)#,#chr(234)#,#chr(235)#,#chr(236)#,#chr(237)#,#chr(238)#,#chr(239)#,
#chr(240)#,#chr(241)#,#chr(242)#,#chr(243)#,#chr(244)#,#chr(245)#,#chr(246)#,#chr(247)#,#chr(248)#,
#chr(249)#,#chr(250)#,#chr(251)#,#chr(252)#,#chr(253)#,#chr(254)#,#chr(255)#";
	

        var goodChars="&euro;,&sbquo;,&fnof;,&bdquo;,&hellip;,&dagger;,&Dagger;,&circ;,&permil;,
&Scaron;,&lsaquo;,&OElig;,&##381;,&lsquo;,&rsquo;,&ldquo;,&rdquo;,&bull;,&ndash;,&mdash;,&tilde;
,&trade;,&scaron;,&rsaquo;,&oelig;,&##382;,&##376;,&iexcl;,&cent;,&pound;,&curren;,&yen;,&brvbar;
,&sect;,&uml;,&copy;,&ordf;,&laquo;,&not;,&shy;,&reg;,&macr;,&deg;,&plusmn;,&sup2;,&sup3;,&acute;
,&micro;,&para;,&middot;,&cedil;,&sup1;,&ordm;,&raquo;,&frac14;,&frac12;,&frac34;,&iquest;,&Agrave;,
&Aacute;,&Acirc;,&Atilde;,&Auml;,&Aring;,&AElig;,&Ccedil;,&Egrave;,&Eacute;,&Ecirc;,&Euml;,&Igrave;,
&Iacute;,&Icirc;,&Iuml;,&ETH;,&Ntilde;,&Ograve;,&Oacute;,&Ocirc;,&Otilde;,&Ouml;,&times;,&Oslash;,
&Ugrave;,&Uacute;,&Ucirc;,&Uuml;,&Yacute;,&THORN;,&szlig;,&agrave;,&aacute;,&acirc;,&atilde;,&auml;,
&aring;,&aelig;,&ccedil;,&egrave;,&eacute;,&ecirc;,&euml;,&igrave;,&iacute;,&icirc;,&iuml;,&eth;,
&ntilde;,&ograve;,&oacute;,&ocirc;,&otilde;,&ouml;,&divide;,&oslash;,&ugrave;,&uacute;,&ucirc;,
&uuml;,&yacute;,&thorn;,&yuml;";
	
	// if you like to go number route then comment the above goodChars and uncomment the following
	//var goodChars="&##8364;,&##8218;,&##402;,&##8222;,&##8230;,&##8224;,&##8225;,&##710;,&##8240;,
&##352;,&##8249;,&##338;,&##381;,&##8216;,&##8217;,&##8220;,&##8221;,&##8226;,&##8211;,&##8212;,&##732;,
&##8482;,&##353;,&##8250;,&##339;,&##382;,&##376;,&##161;,&##162;,&##163;,&##164;,&##165;,&##166;,&##167;,
&##168;,&##169;,&##170;,&##171;,&##172;,&##173;,&##174;,&##175;,&##176;,&##177;,&##178;,&##179;,&##180;,
&##181;,&##182;,&##183;,&##184;,&##185;,&##186;,&##187;,&##188;,&##189;,&##190;,&##191;,&##192;,&##193;,
&##194;,&##195;,&##196;,&##197;,&##198;,&##199;,&##200;,&##201;,&##202;,&##203;,&##204;,&##205;,&##206;,
&##207;,&##208;,&##209;,&##210;,&##211;,&##212;,&##213;,&##214;,&##215;,&##216;,&##217;,&##218;,&##219;,
&##220;,&##221;,&##222;,&##223;,&##224;,&##225;,&##226;,&##227;,&##228;,&##229;,&##230;,&##231;,&##232;,
&##233;,&##234;,&##235;,&##236;,&##237;,&##238;,&##239;,&##240;,&##241;,&##242;,&##243;,&##244;,&##245;,
&##246;,&##247;,&##248;,&##249;,&##250;,&##251;,&##252;,&##253;,&##254;,&##255;";
	
	
	// Return immediately if blank string
	if (NOT Len(Trim(string))) return string;
	
	// Do replacing
	return ReplaceList(string, badChars, goodChars);
}
</cfscript>

...