1
0
mirror of https://github.com/php/php-src.git synced 2026-04-29 19:23:22 +02:00

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

This commit is contained in:
Kalle Sommer Nielsen
2008-08-14 02:56:23 +00:00
parent 540326c31f
commit fcf11ba65e
3 changed files with 25 additions and 11 deletions
+3
View File
@@ -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
View File
@@ -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
+21 -11
View File
@@ -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')) {