PHP中的substr是一个用于截取字符串的函数,可以截取一个字符串从指定位置开始的指定长度的子串,或从指定位置截取到字符串的末尾。
## 使用方法
substr函数有三个参数,第一个参数是要截取的字符串,第二个参数是从哪个位置开始截取,第三个参数是要截取的长度。
```php
substr(string $string, int $start, int|null $length = null): string|false
```
- $string:要截取的字符串。
- $start:截取的起始位置,可以是负数,表示从字符串末尾开始计算;
- $length:截取的长度,如果未指定,则截取从$start开始到字符串末尾的所有字符;
实例:
```php
$str = 'Hello, world!';
echo substr($str, 0, 5); // 输出:Hello
echo substr($str, 7); // 输出:world!
echo substr($str, -6); // 输出:world!
```
在上面的代码中,第一个例子截取了字符串 $str 从0个位置开始到第5个位置的子字符串,即输出了前5个字符Hello。第二个例子截取了字符串 $str 从第7个位置开始到字符串末尾的所有字符,即输出了world!。第三个例子中,substr的第二个参数为负数,意味着从字符串末尾开始计算位置,-6表示倒数第6个字符,输出了world!。
## 返回值
substr函数返回的是截取后的字符串子串,如果参数不合法或执行过程出现错误,会返回false。
## 注意事项
1. 如果指定的$start和$length参数越界,substr函数会返回false。
2. 可以传递null给$length,这意味着截取从$start到字符串末尾的所有字符。
3. 如果传递负数给$length,它将被视为0。
4. 如果传递负数给$start,并且其绝对值大于字符串长度,substr函数会将$start视为0。
5. 如果参数中的字符串是空字符串,substr函数会返回false。
## 案例说明
### 例1:获取URL的协议、主机和路径
```php
$url = 'https://www.baidu.com/s?wd=php';
$protocol = substr($url, 0, strpos($url, '://')); // 获取协议
$host = substr($url, strpos($url, '://') + 3, strpos($url, '/', strpos($url, '://') + 3) - strpos($url, '://') - 3); // 获取主机
$path = substr($url, strpos($url, '/', strpos($url, '://') + 3)); // 获取路径
echo $protocol . '
'; // 输出:https
echo $host . '
'; // 输出:www.baidu.com
echo $path . '
'; // 输出:/s?wd=php
```
在上面的代码中,我们使用了substr函数来截取URL中的协议、主机和路径。代码中,我们首先使用 strpos 函数来查找 "://" 在字符串中的位置,从而确定协议的起始位置。然后,我们使用 strpos 函数查找主机的起始位置和结束位置,从而得到主机名。最后,我们使用 strpos 函数查找路径的起始位置,从而确定路径。
### 例2:获取字符串中最后一个"."后的文件扩展名
```php
$str = 'example.htm';
$ext = substr($str, strrpos($str, '.') + 1); // 获取文件扩展名
echo $ext; // 输出:htm
```
在上面的代码中,我们使用 substr 和 strrpos 函数来从给定的字符串中提取文件扩展名。首先,我们使用 strrpos 函数确定字符串中最后一个 "." 的位置。然后,我们使用 substr 函数来截取 "." 后面的字符串,从而获得文件扩展名。
### 例3:获取用户输入的前10个字符
```php
$input = $_POST['input'];
$len = strlen($input);
$max_len = 10;
$str = substr($input, 0, $max_len);
if ($len > $max_len) {
$str .= '...';
}
echo $str;
```
在上面的代码中,我们使用 substr 函数从用户输入中获取前10个字符。如果输入字符串的长度大于10,则在截取后的字符串末尾添加省略号。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
发表评论 取消回复