Browse Source

MFH: Implemented feature request #34381 (nl2br() should have an option for XHTML/HTML compatible BR element)

PECL
Kalle Sommer Nielsen 18 years ago
parent
commit
fcf11ba65e
  1. 3
      NEWS
  2. 1
      ext/standard/basic_functions.c
  3. 32
      ext/standard/string.c

3
NEWS

@ -12,6 +12,9 @@ PHP NEWS
- Added litespeed SAPI module. (George Wang)
- Added ext/hash support to ext/session's ID generator. (Sara)
- Implemented feature request #34381 (nl2br() should have an option for
XHTML/HTML compatible BR element) (Kalle)
- Fixed a bug causing miscalculations with the "last <weekday> of <n> month"
relative time string. (Derick)

1
ext/standard/basic_functions.c

@ -2739,6 +2739,7 @@ ZEND_END_ARG_INFO()
static
ZEND_BEGIN_ARG_INFO(arginfo_nl2br, 0)
ZEND_ARG_INFO(0, str)
ZEND_ARG_INFO(0, is_xhtml)
ZEND_END_ARG_INFO()
static

32
ext/standard/string.c

@ -3887,18 +3887,19 @@ PHP_FUNCTION(hebrevc)
}
/* }}} */
/* {{{ proto string nl2br(string str)
/* {{{ proto string nl2br(string str [, bool is_xhtml])
Converts newlines to HTML line breaks */
PHP_FUNCTION(nl2br)
{
/* in brief this inserts <br /> before matched regexp \n\r?|\r\n? */
char *tmp, *str;
int new_length;
char *end, *target;
int repl_cnt = 0;
int str_len;
/* in brief this inserts <br /> or <br> before matched regexp \n\r?|\r\n? */
char *tmp, *str;
int new_length;
char *end, *target;
int repl_cnt = 0;
int str_len;
zend_bool is_xhtml = 1;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &str, &str_len, &is_xhtml) == FAILURE) {
return;
}
@ -3927,7 +3928,12 @@ PHP_FUNCTION(nl2br)
RETURN_STRINGL(str, str_len, 1);
}
new_length = str_len + repl_cnt * (sizeof("<br />") - 1);
if (is_xhtml) {
new_length = str_len + repl_cnt * (sizeof("<br />") - 1);
} else {
new_length = str_len + repl_cnt * (sizeof("<br>") - 1);
}
tmp = target = emalloc(new_length + 1);
while (str < end) {
@ -3937,8 +3943,12 @@ PHP_FUNCTION(nl2br)
*target++ = '<';
*target++ = 'b';
*target++ = 'r';
*target++ = ' ';
*target++ = '/';
if (is_xhtml) {
*target++ = ' ';
*target++ = '/';
}
*target++ = '>';
if ((*str == '\r' && *(str+1) == '\n') || (*str == '\n' && *(str+1) == '\r')) {

Loading…
Cancel
Save