src/server/util/util.c

branch
webdav
changeset 273
f4eb5d125e58
parent 256
19259b6c5cf7
child 278
38bf7b42b58c
equal deleted inserted replaced
272:f210681d9dd0 273:f4eb5d125e58
1031 r[4], 1031 r[4],
1032 r[5]); 1032 r[5]);
1033 1033
1034 return pos; 1034 return pos;
1035 } 1035 }
1036
1037
1038 /* ------------------------- util_html_escape -------------------------- */
1039
1040 NSAPI_PUBLIC char *util_html_escape(const char *s)
1041 {
1042 const char *in;
1043
1044 int len = 0;
1045 for (in = s; *in; in++) {
1046 switch (*in) {
1047 case '<':
1048 len += 4; // &lt;
1049 break;
1050 case '>':
1051 len += 4; // &gt;
1052 break;
1053 case '&':
1054 len += 5; // &amp;
1055 break;
1056 case '"':
1057 len += 6; // &quot;
1058 break;
1059 case '\'':
1060 len += 6; // &apos;
1061 break;
1062 case '+':
1063 len += 5; // &#43;
1064 break;
1065 default:
1066 len++;
1067 break;
1068 }
1069 }
1070
1071 char *ns = (char *) MALLOC(len + 1);
1072 if (!ns)
1073 return ns;
1074
1075 char *out = ns;
1076 for (in = s; *in; in++) {
1077 switch (*in) {
1078 case '<':
1079 *out++ = '&';
1080 *out++ = 'l';
1081 *out++ = 't';
1082 *out++ = ';';
1083 break;
1084 case '>':
1085 *out++ = '&';
1086 *out++ = 'g';
1087 *out++ = 't';
1088 *out++ = ';';
1089 break;
1090 case '&':
1091 *out++ = '&';
1092 *out++ = 'a';
1093 *out++ = 'm';
1094 *out++ = 'p';
1095 *out++ = ';';
1096 break;
1097 case '"':
1098 *out++ = '&';
1099 *out++ = 'q';
1100 *out++ = 'u';
1101 *out++ = 'o';
1102 *out++ = 't';
1103 *out++ = ';';
1104 break;
1105 case '\'':
1106 *out++ = '&';
1107 *out++ = 'a';
1108 *out++ = 'p';
1109 *out++ = 'o';
1110 *out++ = 's';
1111 *out++ = ';';
1112 break;
1113 case '+':
1114 *out++ = '&';
1115 *out++ = '#';
1116 *out++ = '4';
1117 *out++ = '3';
1118 *out++ = ';';
1119 break;
1120 default:
1121 *out++ = *in;
1122 break;
1123 }
1124 }
1125 *out = '\0';
1126
1127 return ns;
1128 }
1129

mercurial