cvs: php4 /ext/standard html.c
| From: | Wez Furlong | Date: | Sun, 05 May 2002 23:06:40 +0000 |
| Subject: | cvs: php4 /ext/standard html.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-11717@lists.php.net to get a copy of this message | ||
wez Sun May 5 19:06:40 2002 EDT
Modified files:
/php4/ext/standard html.c
Log:
Add support for remaining entities in HTML 4 for the UTF-8 encoding in
htmlentities/htmlspecial chars.
This is a fix for for #17008.
# I would *really* appreciate it if someone with a good eye could verify
# that all the entities are there and are correctly numbered; I've checked
# it three times, but it's best to be sure.
Index: php4/ext/standard/html.c
diff -u php4/ext/standard/html.c:1.45 php4/ext/standard/html.c:1.46
--- php4/ext/standard/html.c:1.45 Sat Mar 16 04:44:30 2002
+++ php4/ext/standard/html.c Sun May 5 19:06:39 2002
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: html.c,v 1.45 2002/03/16 09:44:30 sesser Exp $ */
+/* $Id: html.c,v 1.46 2002/05/05 23:06:39 wez Exp $ */
#include "php.h"
#include "reg.h"
@@ -31,9 +31,6 @@
#include <langinfo.h>
#endif
-/* This must be fixed to handle the input string according to LC_CTYPE.
- Defaults to ISO-8859-1 for now. */
-
enum entity_charset { cs_terminator, cs_8859_1, cs_cp1252,
cs_8859_15, cs_utf_8, cs_big5, cs_gb2312,
cs_big5hkscs, cs_sjis, cs_eucjp};
@@ -84,6 +81,167 @@
"uuml", "yacute", "thorn", "yuml"
};
+static entity_table_t ent_uni_338_402[] = {
+ /* 338 */
+ "OElig", "oelig", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ /* 352 */
+ "Scaron", "scaron",
+ /* 354 - 375 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ /* 376 */
+ "Yuml",
+ /* 377 - 401 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ /* 402 */
+ "fnof"
+};
+
+static entity_table_t ent_uni_spacing[] = {
+ /* 710 */
+ "circ",
+ /* 711 - 731 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ /* 732 */
+ "tilde",
+};
+
+static entity_table_t ent_uni_greek[] = {
+ /* 913 */
+ "Alpha", "Beta", "Gamma", "Delta", "Epsilon",
"Zeta", "Eta", "Theta",
+ "Iota", "Kappa", "Lambda", "Mu", "Nu",
"X1", "Omicron", "P1", "Rho",
+ NULL, "Sigma", "Tau", "Upsilon", "Ph1", "Ch1",
"Ps1", "Omega",
+ /* 938 - 944 are not mapped */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ "alpha", "beta", "gamma", "delta", "epsilon",
"zeta", "eta", "theta",
+ "iota", "kappa", "lamda", "mu", "nu",
"x1", "omicron", "p1", "rho",
+ "sigmaf", "sigma", "tau", "upsilon", "ph1",
"ch1", "ps1", "omega",
+ /* 970 - 976 are not mapped */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ "thetasym", "ups1h",
+ NULL, NULL, NULL,
+ "p1v"
+};
+
+static entity_table_t ent_uni_punct[] = {
+ /* 8194 */
+ "ensp", "emsp", NULL, NULL, NULL, NULL, NULL,
+ "thinsp", NULL, NULL, "zwnj", "zwj", "lrm",
"rlm",
+ NULL, NULL, NULL, "ndash", "mdash", NULL, NULL, NULL,
+ "lsquo", "rsquo", "sbquo", NULL, "ldquo",
"rdquo", "bdquo",
+ "dagger", "Dagger", "bull", NULL, NULL, NULL, "hellip",
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "permil", NULL,
+ "prime", "Prime", NULL, NULL, NULL, NULL, NULL, "lsaquo",
"rsaquo",
+ NULL, NULL, NULL, "oline", NULL, NULL, NULL, NULL, NULL,
+ "frasl"
+};
+
+static entity_table_t ent_uni_8465_8501[] = {
+ /* 8465 */
+ "image", NULL, NULL, NULL, NULL, NULL, NULL,
+ /* 8472 */
+ "weierp", NULL, NULL, NULL,
+ /* 8476 */
+ "real", NULL, NULL, NULL, NULL, NULL,
+ /* 8482 */
+ "trade", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ /* 8501 */
+ "alefsym",
+};
+
+static entity_table_t ent_uni_8592_9002[] = {
+ /* 8592 */
+ "larr", "uarr", "rarr", "darr", "harr",
+ /* 8597 - 8628 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL,
+ /* 8629 */
+ "crarr",
+ /* 8630 - 8655 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ /* 8656 */
+ "lArr", "uArr", "rArr", "dArr", "hArr",
+ /* 8661 - 8703 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL,
+ /* 8704 */
+ "forall", "part", "exist", NULL, "empty", NULL,
"nabla", "isin",
+ "notin", NULL, "n1", NULL, NULL, NULL, "prod", NULL,
"sum", "minus",
+ NULL, NULL, NULL, NULL, "lowast", NULL, NULL, "radic", NULL, NULL,
+ "prop", "infin", NULL, "ang", NULL, NULL, NULL, NULL, NULL, NULL,
+ "and", "or", "cap", "cup", "int", NULL, NULL,
NULL, NULL, NULL,
+ NULL, NULL, NULL, "there4", NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, "sim", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ "cong", NULL, NULL, "asymp",
+ /* 8777 - 8799 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL,
+ /* 8800 */
+ "ne", "equiv", NULL, NULL, "le", "ge",
+ /* 8806 - 8833 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ /* 8834 */
+ "sub", "sup", "nsub", NULL, "sube", "supe",
+ /* 8840 - 8852 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ /* 8853 */
+ "oplus", NULL, "otimes",
+ /* 8856 - 8868 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ /* 8869 */
+ "perp",
+ /* 8870 - 8901 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL,
+ /* 8901 */
+ "sdot",
+ /* 8902 - 8967 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ /* 8968 */
+ "lceil", "rceil", "lfloor", "rfloor",
+ /* 8969 - 9000 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL,
+ /* 9001 */
+ "lang", "rang",
+};
+
+static entity_table_t ent_uni_9674[] = {
+ /* 9674 */
+ "loz"
+};
+
+static entity_table_t ent_uni_9824_9830[] = {
+ /* 9824 */
+ "spades", NULL, NULL, "clubs", NULL, "hearts", "diams"
+};
+
struct html_entity_map {
enum entity_charset charset; /* charset identifier */
unsigned short basechar; /* char code at start of table */
@@ -97,6 +255,14 @@
{ cs_8859_1, 0xa0, 0xff, ent_iso_8859_1 },
{ cs_8859_15, 0xa0, 0xff, ent_iso_8859_15 },
{ cs_utf_8, 0xa0, 0xff, ent_iso_8859_1 },
+ { cs_utf_8, 338, 402, ent_uni_338_402 },
+ { cs_utf_8, 710, 732, ent_uni_spacing },
+ { cs_utf_8, 913, 982, ent_uni_greek },
+ { cs_utf_8, 8194, 8260, ent_uni_punct },
+ { cs_utf_8, 8465, 8501, ent_uni_8465_8501 },
+ { cs_utf_8, 8592, 9002, ent_uni_8592_9002 },
+ { cs_utf_8, 9674, 9674, ent_uni_9674 },
+ { cs_utf_8, 9824, 9830, ent_uni_9824_9830 },
{ cs_big5, 0xa0, 0xff, ent_iso_8859_1 },
{ cs_gb2312, 0xa0, 0xff, ent_iso_8859_1 },
{ cs_big5hkscs, 0xa0, 0xff, ent_iso_8859_1 },