Opino igual que Zerokilled: es mejor hacerlo del lado del servidor. Tampoco deberías estar tan seguro acerca de que hacerlo con expresiones regulares tiene una mejor performance que un loop. Deberías probarlo. Este test muestra que no siempre es así:
http://jsperf.com/regex-vs-for-loop/4
Y eso se debe a que internamente los metodos de regexp también realizan búsquedas y usan recursividad. Es interesante estudiar un motor de javascript realizado en algún lenguaje que conozcamos para comprender este tipo de cosas. Por ejemplo:
http://j4p5.sourceforge.net/
Si yo tuviera que hacer algo así usaría algo como esto:
Código PHP:
function htmlEntities(texto){
//by Micox - elmicoxcodes.blogspot.com - www.ievolutionweb.com
var i,carac,letra,novo='';
for(i=0;i<texto.length;i++){
carac = texto[i].charCodeAt(0);
if( (carac > 47 && carac < 58) || (carac > 62 && carac < 127) ){
//se for numero ou letra normal
novo += texto[i];
}else{
novo += "&#" + carac + ";";
}
}
return novo;
}