tex*_*nic 18 php encoding substring utf-8
我(在SQLite数据库中)有以下字符串:
????? ? ??????? ?? ????? ????????, ??????? ? ???????????? ?????? ??????? ??????.
PHP使用正确显示该字符串print.我想获得这个字符串的前50个字符,即
????? ? ??????? ?? ????? ????????, ??????? ? ?????.
我尝试过使用substr和mb_substr,然后得到
????? ? ??????? ?? ????? ???,即只有28个字符.
在这里和其他地方读到mbstring的问题之后,我意识到这实际上是一个50字节的字符串(22个俄语字符= 44个字节加上5个空格加1个问号).
这有什么好的解决方案吗?我的所有字符串都是UTF-8,所以我当然可以自己编写一个子函数,通过检查每个字节的第一位等等.但这肯定是在之前完成的,对吧?
更新:我认为mb_substr无法正常工作,因为mb_detect_encoding() 无法正常工作.
Abi*_*ain 17
见以下网址:
在PHP中从UTF-8字符串中提取子字符串
http://osc.co.cr/extracting-a-substring-from-a-utf-8-string-in-php/
带有UTF-8的PHP子字符串
http://greekgeekz.blogspot.in/2010/11/php-substring-with-utf-8.html
或尝试一下:
示例#1
$str1 = utf8_encode("Feliz día");
$str2 = substr($str1, 0, 9);
echo utf8_decode($str2);
// will output Feliz d?
Run Code Online (Sandbox Code Playgroud)
例#2
$str3 = mb_substr($str1, 0, 9, 'UTF-8');
echo utf8_decode($str3);
// will output Feliz dí
Run Code Online (Sandbox Code Playgroud)
从PHP> = 5.3开始,您还可以声明编码指令并使用substr函数
例#3
declare(encoding='UTF-8');
$str4 = "Feliz día";
$str5 = substr($str4, 0, 9);echo $str5;
// will output Feliz dí
Run Code Online (Sandbox Code Playgroud)
像往常一样,答案似乎就在这里.(老实说,我搜索了大约一个小时)
(铂)字符串函数和php中的UTF8的答案如下:
确保设置正确的内部编码:mb_internal_encoding('utf-8');
使用这个mb_internal_encoding('utf-8'); 一切正常.很抱歉打扰你们,谢谢你的帮助.
试试mb_strcut()。
它的行为与 相同substr(),只是它不会留下最后一个字符被破坏。
如果在您试图切出的位置,有一个 2 个或更多字节的多字节字符,mb_strcut()则不会将该字符切割成碎片,而是会忽略该字符。
例如,如果您试图从 string 中删除 50 个字节????? ? ??????? ?? ????? ????????, ??????? ? ???????????? ?????? ??????? ??????.,mb_strcut()则不会将字符切?成两半,但会将其从结果中删除。
$str = "????? ? ??????? ?? ????? ????????, ??????? ? ???????????? ?????? ??????? ??????.";
echo mb_strcut($str, 0, 50);
// Prints: ????? ? ??????? ?? ????? ??
echo substr($str, 0, 50);
// Prints: ????? ? ??????? ?? ????? ???
echo mb_substr($str, 0, 50);
// Prints: ????? ? ??????? ?? ????? ????????, ??????? ? ?????
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
18739 次 |
| 最近记录: |