mirror of
https://github.com/php/php-src.git
synced 2024-11-25 10:54:15 +08:00
MFH: Implemented feature request #34381 (nl2br() should have an option for XHTML/HTML compatible BR element)
This commit is contained in:
parent
540326c31f
commit
fcf11ba65e
3
NEWS
3
NEWS
@ -12,6 +12,9 @@ PHP NEWS
|
|||||||
- Added litespeed SAPI module. (George Wang)
|
- Added litespeed SAPI module. (George Wang)
|
||||||
- Added ext/hash support to ext/session's ID generator. (Sara)
|
- 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"
|
- Fixed a bug causing miscalculations with the "last <weekday> of <n> month"
|
||||||
relative time string. (Derick)
|
relative time string. (Derick)
|
||||||
|
|
||||||
|
@ -2739,6 +2739,7 @@ ZEND_END_ARG_INFO()
|
|||||||
static
|
static
|
||||||
ZEND_BEGIN_ARG_INFO(arginfo_nl2br, 0)
|
ZEND_BEGIN_ARG_INFO(arginfo_nl2br, 0)
|
||||||
ZEND_ARG_INFO(0, str)
|
ZEND_ARG_INFO(0, str)
|
||||||
|
ZEND_ARG_INFO(0, is_xhtml)
|
||||||
ZEND_END_ARG_INFO()
|
ZEND_END_ARG_INFO()
|
||||||
|
|
||||||
static
|
static
|
||||||
|
@ -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 */
|
Converts newlines to HTML line breaks */
|
||||||
PHP_FUNCTION(nl2br)
|
PHP_FUNCTION(nl2br)
|
||||||
{
|
{
|
||||||
/* in brief this inserts <br /> before matched regexp \n\r?|\r\n? */
|
/* in brief this inserts <br /> or <br> before matched regexp \n\r?|\r\n? */
|
||||||
char *tmp, *str;
|
char *tmp, *str;
|
||||||
int new_length;
|
int new_length;
|
||||||
char *end, *target;
|
char *end, *target;
|
||||||
int repl_cnt = 0;
|
int repl_cnt = 0;
|
||||||
int str_len;
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3927,7 +3928,12 @@ PHP_FUNCTION(nl2br)
|
|||||||
RETURN_STRINGL(str, str_len, 1);
|
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);
|
tmp = target = emalloc(new_length + 1);
|
||||||
|
|
||||||
while (str < end) {
|
while (str < end) {
|
||||||
@ -3937,8 +3943,12 @@ PHP_FUNCTION(nl2br)
|
|||||||
*target++ = '<';
|
*target++ = '<';
|
||||||
*target++ = 'b';
|
*target++ = 'b';
|
||||||
*target++ = 'r';
|
*target++ = 'r';
|
||||||
*target++ = ' ';
|
|
||||||
*target++ = '/';
|
if (is_xhtml) {
|
||||||
|
*target++ = ' ';
|
||||||
|
*target++ = '/';
|
||||||
|
}
|
||||||
|
|
||||||
*target++ = '>';
|
*target++ = '>';
|
||||||
|
|
||||||
if ((*str == '\r' && *(str+1) == '\n') || (*str == '\n' && *(str+1) == '\r')) {
|
if ((*str == '\r' && *(str+1) == '\n') || (*str == '\n' && *(str+1) == '\r')) {
|
||||||
|
Loading…
Reference in New Issue
Block a user