summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>2002-05-11 12:17:53 +0000
committerZeev Suraski <zeev@php.net>2002-05-11 12:17:53 +0000
commit77f41212f65ad786d9c277a0f5f1bc00b26a00e0 (patch)
treeaaa6353a28d2fbfcab05bb44f790e213df806b46
parent19b7861d70a79417797a6f8ebc0d74133d75bfeb (diff)
downloadphp-git-77f41212f65ad786d9c277a0f5f1bc00b26a00e0.tar.gz
Removing HTMLization of ' ' wasn't ok, it didn't deal with series of spaces
properly. Turn series of spaces into &nbsp;'s.
-rw-r--r--main/main.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/main/main.c b/main/main.c
index 982220ce64..26c21068b8 100644
--- a/main/main.c
+++ b/main/main.c
@@ -382,11 +382,12 @@ PHPAPI int php_printf(const char *format, ...)
PHPAPI void php_html_puts(const char *str, uint size TSRMLS_DC)
{
- const char *estr;
+ const char *end = str+size;
+ const char *p = str;
smart_str s = {0};
- for (estr = str + size; str < estr; str++) {
- switch (*str) {
+ while (p < end) {
+ switch (*p) {
case '\n':
smart_str_appendl(&s, "<br />", sizeof("<br />")-1);
break;
@@ -399,19 +400,25 @@ PHPAPI void php_html_puts(const char *str, uint size TSRMLS_DC)
case '&':
smart_str_appendl(&s, "&amp;", sizeof("&amp;")-1);
break;
+ case ' ': {
+ const char *nextchar = p+1, *prevchar = p-1;
-/* Commented out since this is not necessary */
-/*
- case ' ':
- smart_str_appendl(&s, "&nbsp;", sizeof("&nbsp;")-1);
+ /* series of spaces should be converted to &nbsp;'s */
+ if (((nextchar < end) && *nextchar==' ')
+ || ((prevchar >= str) && *prevchar==' ')) {
+ smart_str_appendl(&s, "&nbsp;", sizeof("&nbsp;")-1);
+ } else {
+ smart_str_appendc(&s, ' ');
+ }
+ }
break;
-*/
case '\t':
smart_str_appendl(&s, "&nbsp;&nbsp;&nbsp;&nbsp;", sizeof("&nbsp;&nbsp;&nbsp;&nbsp;")-1);
break;
default:
- smart_str_appendc(&s, *str);
+ smart_str_appendc(&s, *p);
}
+ p++;
}
if (s.c) {