实现php substr,mb_substr
package php
import (
"unicode/utf8"
)
//Substr 模拟PHP substr 函数
func Substr(str string, start int32, length uint32) string {
if len(str) == 0 {
return str
}
if start < 0 {
start = int32(len(str)) + start
if start < 0 {
start = 0
}
}
return str[start : uint32(start)+length]
}
//MbSubstr 模拟PHP mb_substr 函数支持utf8编码
func MbSubstr(str string, start int32, length uint32) string {
if len(str) == 0 {
return str
}
runeLen := utf8.RuneCountInString(str)
if start < 0 {
start = int32(runeLen) + start
if start < 0 {
start = 0
}
}
var tmpNum int32 = 0
var resRune = make([]rune, 0, runeLen)
for len(str) > 0 {
r, size := utf8.DecodeRuneInString(str)
str = str[size:]
if tmpNum >= start && uint32(len(resRune)) < length {
resRune = append(resRune, r)
}
tmpNum++
}
return string(resRune)
}
测试测试
str1 := "hello i am Gopher"
str2 := "Hello, 世界"
fmt.Println(php.Substr(str1, 3, 5))
fmt.Println(php.MbSubstr(str2, 5, 3))