php 截取字串函數(中文字串)這是一款php 截取字串函數哦,這是一款支援中文字串哦,它可以截取html與中西文,等混合的內容,並且把html標籤不算在字元截取之內,如果html標籤沒有閉合,程式將自動過濾多餘的標籤。
php教程 截取字串函數(中文字串)
這是一款php 截取字串函數哦,這是一款支援中文字串哦,它可以截取html與中西文,等混合的內容,並且把html標籤不算在字元截取之內,如果html標籤沒有閉合,程式將自動過濾多餘的標籤。
*/
function mysubstr( $str, $length ){
$tagcnt = 0;
$charcnt = 0;
$tag = '';
$maxlen = strlen( $str );
$resultstr = '';
$tagstack = array();
for( $i = 0; $i < $length; $i++ ){
if( $str[$i] == '<' ){
$resultstr .= $str[$i];
for( $j=$i; $str[$j]!='>'; $j++,$length++ ){
$tag .= $str[$j];
}
$tagcnt++;
$length++;
$tag .= '>';
//如果是開始標記,則入棧,如果是與之相對應的結束標記則出棧
if( preg_match('/<([^/]+)?>/i', $tag, $r) ){
echo '入棧:',htmlspecialchars($r[1]),'
';
array_push($tagstack, $r[1]);
}
elseif( preg_match( '/'.$tagstack[count($tagstack)-1].'/', $tag ) ){
echo '出棧:',htmlspecialchars($tagstack[count($tagstack)-1]),'
';
array_pop( $tagstack );
}
$tag = '';
continue;
}
$charcnt++;
$resultstr .= $str[$i];
}
echo '
最後結果為:';
//棧是空的直接返回
if(empty($tagstack)){
return $resultstr;
}
//否則去掉沒有結束標記的開始標記
else{
while(!empty($tagstack)){
$tag = array_pop($tagstack);
$index = strrpos($resultstr, $tag);
for($i = $index-1; $resultstr[$i] != '>'; $i++ ){
$resultstr[$i] = '';
}
$resultstr[$i++] = '';
}
return $resultstr;
}
}
$sttime = microtime(true);
$stmem = memory_get_usage();
$str = "a1b2
c3d4e5
f6g7h8";
echo '處理結果為:
',htmlspecialchars( mysubstr( $str, 18 ) ),'
';
echo "記憶體使用量情況:",(memory_get_usage()-$stmem),'
';
echo "演算法已耗用時間(microtime):",(microtime(true)-$sttime),'
';
//方法二
/
**
* 函數名 html_substr
* 功能 從html串中截取指定長度的字串,html標記不計算在內
* 參數
* $str 要截取的串
* $len 要截取的長度
* $mode 不匹配的標記的處理方式 0 刪去(預設),1 補齊
* 返回 截取到的串
* 說明
* 未考慮多位元組字元,僅已位元組做計數單位
* 未考慮可單獨存在的標記
**/
function html_substr($str, $len, $mode=0) {
$ar= preg_split('/(|<[^>]*>)/s', $str, -1, preg_split_delim_capture);
foreach($ar as $k => $v) {
if($v{0} != '<') {
$len = $len - strlen($v);
if($len < 0) $ar[$k] = substr($v, 0, $len);
}else $ar[$k] = strtolower($v);
if($len <= 0) break;
}
$ar = array_slice($ar, 0, $k+1);
$len = count($ar);
foreach($ar as $k=>$v) {
if($v{0} == '<' && $v[1] != '/') {
$ch = str_replace('<', ' for($i=$k+1; $i<$len && $ar[$i]!=$ch; $i++);
if($i == $len)
if($mode)
$ar[$len] = $ch . $ar[$len];
else
$ar[$k] = '';
}
}
return join('', $ar);
}
$str = "123abc456def789";
echo '
';<br />echo html_substr($str, 5) . php_eol;<br />echo html_substr($str, 5, 1);</p></blockquote><p>1 2 </p><p align="left"><span id="url" itemprop="url">http://www.bkjia.com/PHPjc/632042.html</span><span id="indexUrl" itemprop="indexUrl">www.bkjia.com</span><span id="isOriginal" itemprop="isOriginal">true</span><span id="isBasedOnUrl" itemprop="isBasedOnUrl">http://www.bkjia.com/PHPjc/632042.html</span><span id="genre" itemprop="genre">TechArticle</span><span id="description" itemprop="description">php 截取字串函數(中文字串)這是一款php 截取字串函數哦,這是一款支援中文字串哦,它可以截取html與中西文,等混合的內容,...</span></p><li ><i class="layui-icon">