国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

淺談PHP源碼七:關于nl2br, ltrim, rtrim, trim函數

2020-03-22 19:25:05
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了關于淺談PHP源碼七:關于nl2br, ltrim, rtrim, trim函數,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

淺談PHP源碼七:關于nl2br, ltrim, rtrim, trim函數

string nl2br ( string string )

Returns string with ‘
‘ inserted before all newlines.

在代碼中有注釋如下:

/* it is really faster to scan twice and allocate mem once insted scanning once
and constantly reallocing */

程序先計算需要替換的個數,然后一次性計算需要分配的內存大小。從而減少了每次替換都重新分配內存的開銷。

由此可見PHP源碼的作者的程序優化上下了不少功夫。

源碼摘抄如下:

 str = Z_STRVAL_PP(zstr); // 字符串開始位置 end = str + Z_STRLEN_PP(zstr); // 字符串結束地址 /* it is really faster to scan twice and allocate mem once insted scanning once and constantly reallocing */ while (str end) { // 計算需要替換的位置個數 if (*str == /r ) { if (*(str+1) == /n ) { str++; repl_cnt++; } else if (*str == /n ) { if (*(str+1) == /r ) { str++; repl_cnt++; str++; } if (repl_cnt == 0) { // 如果沒有可替換的字符串,直接返回 RETURN_STRINGL(Z_STRVAL_PP(zstr), Z_STRLEN_PP(zstr), 1); // 給新生成的字符串分配內存 new_length = Z_STRLEN_PP(zstr) + repl_cnt * (sizeof( br / ) - 1); tmp = target = emalloc(new_length + 1);  str = Z_STRVAL_PP(zstr); while (str end) { switch (*str) { case /r : // 沒有break,直接轉下個case case /n : *target++ =  *target++ = b  *target++ = r  *target++ =  *target++ = /  *target++ = if ((*str == /r *(str+1) == /n ) || (*str == /n *(str+1) == /r )) { *target++ = *str++; /* lack of a break; is intentional */ default: *target++ = *str; str++; } *target = /0 // 添加最后的結束字符  RETURN_STRINGL(tmp, new_length, 0); // 返回結果

ltrim — Strip whitespace (or other characters) from the beginning of a string

rtrim — Strip whitespace (or other characters) from the end of a string

trim — Strip whitespace (or other characters) from the beginning and end of a string

這三個函數都是調用html' target='_blank'>static void php_do_trim(INTERNAL_FUNCTION_PARAMETERS, int mode)

===》PHPAPI char *php_trim(char *c, int len, char *what, int what_len, zval *return_value, int mode TSRMLS_DC)

實現,依據不同的mode(ltrim = 1, rtrim = 2, trim = 3)實現。

對于第二個參數,指過濾的字符,在默認情況下是 空格 /n/r/t/v/0

在程序中可以看到過濾用的字符僅有char mask[256];即ASCII 碼的256個值

在使用php_charmask(unsigned char *input, int len, char *mask TSRMLS_DC)函數創建過濾用的字符HASH數組

如果是1或3(程序實現使用的是 mode 1),則過濾源字符串前面的字符,從頭開始遍歷每個字符串,直接hash判斷是否是需要過濾的字符,直到第一個不是過濾字符的位置結束

如果是2或 3(程序實現使用的是 mode 2),則過濾源字符串后面的字符,過程與前面類似。

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

淺談PHP源碼六:關于stream_get_wrappers函數

淺談PHP源碼五:關于array 數組的創建

淺談PHP源碼四:關于count函數

以上就是淺談PHP源碼七:關于nl2br, ltrim, rtrim, trim函數的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 甘泉县| 南安市| 深水埗区| 米泉市| 白朗县| 华宁县| 合肥市| 南江县| 康平县| 探索| 中牟县| 阜平县| 隆安县| 彭州市| 龙山县| 鹰潭市| 和林格尔县| 涟水县| 深州市| 北川| 定州市| 蒙城县| 南投县| 东宁县| 黄冈市| 涿州市| 七台河市| 新昌县| 宝兴县| 成安县| 白城市| 广元市| 陇川县| 旺苍县| 木兰县| 淳化县| 北票市| 滁州市| 黄梅县| 宜黄县| 澄迈县|