`

drupal的字符串截取函数

 
阅读更多

 

php中的

substr(string,start,length)

该函数对string进行截取操作,截取从字符串的start位置开始,到length长度结束。
利用substr()函数对普通字符进行截取操作会非常方便,但对全角字符进行截取可能会造成乱码。

 

drupal提供了一个安全可靠,又快速的字符串截取函数,无需区分字符是全角还是半角

drupal_substr($text, $start, $length = NULL)

 

function drupal_substr($text, $start, $length = NULL) {
  global $multibyte;
  if ($multibyte == UNICODE_MULTIBYTE) {
    return $length === NULL ? mb_substr($text, $start) : mb_substr($text, $start, $length);
  }
  else {
    $strlen = strlen($text);
    // Find the starting byte offset.
    $bytes = 0;
    if ($start > 0) {
      // Count all the continuation bytes from the start until we have found
      // $start characters or the end of the string.
      $bytes = -1;
      $chars = -1;
      while ($bytes < $strlen - 1 && $chars < $start) {
        $bytes++;
        $c = ord($text[$bytes]);
        if ($c < 0x80 || $c >= 0xC0) {
          $chars++;
        }
      }
    }
    elseif ($start < 0) {
      // Count all the continuation bytes from the end until we have found
      // abs($start) characters.
      $start = abs($start);
      $bytes = $strlen;
      $chars = 0;
      while ($bytes > 0 && $chars < $start) {
        $bytes--;
        $c = ord($text[$bytes]);
        if ($c < 0x80 || $c >= 0xC0) {
          $chars++;
        }
      }
    }
    $istart = $bytes;

    // Find the ending byte offset.
    if ($length === NULL) {
      $iend = $strlen;
    }
    elseif ($length > 0) {
      // Count all the continuation bytes from the starting index until we have
      // found $length characters or reached the end of the string, then
      // backtrace one byte.
      $iend = $istart - 1;
      $chars = -1;
      $last_real = FALSE;
      while ($iend < $strlen - 1 && $chars < $length) {
        $iend++;
        $c = ord($text[$iend]);
        $last_real = FALSE;
        if ($c < 0x80 || $c >= 0xC0) {
          $chars++;
          $last_real = TRUE;
        }
      }
      // Backtrace one byte if the last character we found was a real character
      // and we don't need it.
      if ($last_real && $chars >= $length) {
        $iend--;
      }
    }
    elseif ($length < 0) {
      // Count all the continuation bytes from the end until we have found
      // abs($start) characters, then backtrace one byte.
      $length = abs($length);
      $iend = $strlen;
      $chars = 0;
      while ($iend > 0 && $chars < $length) {
        $iend--;
        $c = ord($text[$iend]);
        if ($c < 0x80 || $c >= 0xC0) {
          $chars++;
        }
      }
      // Backtrace one byte if we are not at the beginning of the string.
      if ($iend > 0) {
        $iend--;
      }
    }
    else {
      // $length == 0, return an empty string.
      return '';
    }

    return substr($text, $istart, max(0, $iend - $istart + 1));
  }
}

 

 

 

分享到:
评论

相关推荐

    PHP中文帮助手册

    3. **字符串操作**:PHP提供了丰富的字符串处理函数,如`strlen()`计算长度,`substr()`截取子串,`str_replace()`替换字符串,`strpos()`查找子串位置等。 4. **数组操作**:PHP支持索引数组和关联数组,使用`...

    PHP完全中文使用手册

    1. **字符串处理**:涵盖字符串的拼接、查找、替换、截取等操作,以及正则表达式在字符串处理中的应用。 2. **数组操作**:讲解索引数组、关联数组的创建、遍历和修改,以及数组函数的使用,如array_push、array_...

    50套PHP面试题

    - 数据类型:包括整型、浮点型、字符串、布尔型、数组、对象、NULL和资源。 - 控制结构:if/else,switch/case,for,while,do/while等。 2. **函数与类** - 函数:自定义函数使用`function`关键字,支持默认...

    PHP入门详细CHM教程

    1. **字符串处理**:`str_replace`替换字符串、`substr`截取字符串、`strpos`查找子串位置等。 2. **数组操作**:`array_push`向数组添加元素、`count`计算数组长度、`array_merge`合并数组。 3. **日期与时间**:`...

    usm-php

    5. **字符串处理**:PHP提供了丰富的字符串操作函数,如`strlen()`计算字符串长度,`substr()`截取子字符串,`str_replace()`替换字符串,`explode()`和`implode()`用于字符串的分割和合并。 6. **文件操作**:PHP...

    做288

    2. **字符串处理**: PHP提供了丰富的字符串操作函数,如`strlen()`计算长度,`strpos()`查找子串,`substr()`截取字符串,`str_replace()`替换子串,以及`explode()`和`implode()`用于字符串与数组的转换。...

    pw2021_203040107:资料库Mata Kuliah Pemrograman Web Tahun Ajaran 2021

    6. **字符串处理**: PHP提供了丰富的字符串函数,如`strlen`计算长度,`substr`截取子串,`str_replace`替换字符串等。 7. **文件操作**: PHP可以读写文件,如`fopen`打开文件,`fwrite`写入文件,`fclose`关闭文件...

    qnszt_gyak_php

    6. **字符串处理**:PHP提供了丰富的字符串处理函数,如`strlen`计算长度,`substr`截取子串,`str_replace`替换子串等。 7. **文件操作**:如`fopen`打开文件,`fwrite`写入文件,`fclose`关闭文件等。 8. **错误与...

    octa:个人的

    3. **字符串处理**:PHP提供了许多内置函数来操作字符串,如 `strlen()` 计算长度,`substr()` 截取子串,`str_replace()` 替换字符串,以及正则表达式相关函数如 `preg_match()` 和 `preg_replace()`。 4. **数组...

    PHP_Fundamentals

    PHP提供了丰富的字符串处理函数,如`strlen()`计算长度,`substr()`截取子串,`strpos()`查找子串位置,`str_replace()`替换子串,`trim()`去除两端空白等。 **数组操作** 数组处理函数包括`count()`计算元素个数...

    例子

    6. **字符串处理**:`substr`截取字符串,`strpos`查找子串位置,`str_replace`替换子串,`strtolower/strtoupper`转换大小写。 7. **文件与目录操作**:`file_get_contents`读取文件内容,`file_put_contents`写入...

    PHPlearning

    了解如何处理字符串(如查找、替换、截取)和数组(如遍历、排序、合并)对于处理数据至关重要。 ### 3. 函数与类 PHP支持自定义函数,用于封装代码块以重复使用。同时,PHP5引入了面向对象编程(OOP),包括类、...

Global site tag (gtag.js) - Google Analytics