summaryrefslogtreecommitdiff
path: root/ext/standard/html.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/html.c')
-rw-r--r--ext/standard/html.c134
1 files changed, 134 insertions, 0 deletions
diff --git a/ext/standard/html.c b/ext/standard/html.c
new file mode 100644
index 0000000000..f15131523d
--- /dev/null
+++ b/ext/standard/html.c
@@ -0,0 +1,134 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP HTML Embedded Scripting Language Version 3.0 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997,1998 PHP Development Team (See Credits file) |
+ +----------------------------------------------------------------------+
+ | This program is free software; you can redistribute it and/or modify |
+ | it under the terms of one of the following licenses: |
+ | |
+ | A) the GNU General Public License as published by the Free Software |
+ | Foundation; either version 2 of the License, or (at your option) |
+ | any later version. |
+ | |
+ | B) the PHP License as published by the PHP Development Team and |
+ | included in the distribution in the file: LICENSE |
+ | |
+ | This program is distributed in the hope that it will be useful, |
+ | but WITHOUT ANY WARRANTY; without even the implied warranty of |
+ | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+ | GNU General Public License for more details. |
+ | |
+ | You should have received a copy of both licenses referred to here. |
+ | If you did not, or have any questions about PHP licensing, please |
+ | contact core@php.net. |
+ +----------------------------------------------------------------------+
+ | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> |
+ | Jaakko Hyvätti <jaakko.hyvatti@iki.fi> |
+ +----------------------------------------------------------------------+
+ */
+
+#ifdef THREAD_SAFE
+#include "tls.h"
+#endif
+#include "php.h"
+#include "reg.h"
+#include "html.h"
+
+/* This must be fixed to handle the input string according to LC_CTYPE.
+ Defaults to ISO-8859-1 for now. */
+
+static char EntTable[][7] =
+{
+ "nbsp","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"
+};
+
+static void _php3_htmlentities(INTERNAL_FUNCTION_PARAMETERS, int all)
+{
+ pval *arg;
+ int i, len, maxlen;
+ unsigned char *old;
+ char *new;
+ TLS_VARS;
+
+ if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &arg) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_string(arg);
+
+ maxlen = 2 * arg->value.str.len;
+ if (maxlen < 128)
+ maxlen = 128;
+ new = emalloc (maxlen);
+ len = 0;
+
+ old = (unsigned char *)arg->value.str.val;
+ i = arg->value.str.len;
+ while (i--) {
+ if (len + 9 > maxlen)
+ new = erealloc (new, maxlen += 128);
+ if (38 == *old) {
+ memcpy (new + len, "&amp;", 5);
+ len += 5;
+ } else if (34 == *old) {
+ memcpy (new + len, "&quot;", 6);
+ len += 6;
+ } else if (60 == *old) {
+ memcpy (new + len, "&lt;", 4);
+ len += 4;
+ } else if (62 == *old) {
+ memcpy (new + len, "&gt;", 4);
+ len += 4;
+ } else if (all && 160 <= *old) {
+ new [len++] = '&';
+ strcpy (new + len, EntTable [*old - 160]);
+ len += strlen (EntTable [*old - 160]);
+ new [len++] = ';';
+ } else {
+ new [len++] = *old;
+ }
+ old++;
+ }
+ new [len] = '\0';
+
+ RETVAL_STRINGL(new,len,1);
+ efree(new);
+}
+
+/* {{{ proto string htmlspecialchars(string string)
+ Convert special characters to HTML entities */
+void php3_htmlspecialchars(INTERNAL_FUNCTION_PARAMETERS)
+{
+ _php3_htmlentities(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);
+}
+/* }}} */
+
+/* {{{ proto string htmlentities(string string)
+ Convert all applicable characters to HTML entities */
+void php3_htmlentities(INTERNAL_FUNCTION_PARAMETERS)
+{
+ _php3_htmlentities(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);
+}
+/* }}} */
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ */