PHP的substr()函数与utf-8在最后留下 标记

这是简单的代码

<?php $var = "Бензин Офиси А.С. также производит все типы жира и смазок и их побочных продуктов в его смесительных установках нефти машинного масла в Деринце, Измите, Алиага и Измире. У Компании есть 3 885 станций технического обслуживания, включая сжиженный газ (ЛПГ) станции под фирменным знаком Петрогаз, приблизительно 5 000 дилеров, двух смазочных смесительных установок, 12 терминалов, и 26 единиц поставки аэропорта."; $foo = substr($var,0,142); echo $foo; ?> 

并输出这样的东西:

БензинОфисиА.С. такжепроизводитвсетипыжираисмазокиихпобочныхпродук …

我试过mb_substr()没有运气。 如何以正确的方式做到这一点?

上面的注释是正确的,只要你在服务器上启用了mbstring。

 $var = "Бензин Офиси А.С. также производит все типы жира и смазок и их побочных продуктов в его смесительных установках нефти машинного масла в Деринце, Измите, Алиага и Измире. У Компании есть 3 885 станций технического обслуживания, включая сжиженный газ (ЛПГ) станции под фирменным знаком Петрогаз, приблизительно 5 000 дилеров, двух смазочных смесительных установок, 12 терминалов, и 26 единиц поставки аэропорта."; $foo = mb_substr($var,0,142, "utf-8"); исмазокиихпобочныхпродуктоввегосмесительныхустановкахнефтимашинногомаславДеринце $var = "Бензин Офиси А.С. также производит все типы жира и смазок и их побочных продуктов в его смесительных установках нефти машинного масла в Деринце, Измите, Алиага и Измире. У Компании есть 3 885 станций технического обслуживания, включая сжиженный газ (ЛПГ) станции под фирменным знаком Петрогаз, приблизительно 5 000 дилеров, двух смазочных смесительных установок, 12 терминалов, и 26 единиц поставки аэропорта."; $foo = mb_substr($var,0,142, "utf-8"); 

这里是PHP文档:

http://php.net/manual/en/book.mbstring.php

unicodestring的适当(逻辑)替代方法;

 <?php function substr_unicode($str, $s, $l = null) { return join("", array_slice( preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $s, $l)); } $str = "Büyük"; $s = 0; // start from "0" (nth) char $l = 3; // get "3" chars echo substr($str, $s, $l) ."\n"; // Bü echo mb_substr($str, $s, $l) ."\n"; // Bü echo substr_unicode($str, $s, $l); // Büy ?> 

使用PHP:mb_substr – 手册

PHP5本身不理解UTF-8。 如果它出现的话,build议使用PHP6。

使用多字节string函数来安全地操作UTF-8string。

例如,在你的情况下, mb_substr()

在UTF-8string中不要在substr函数中使用常量:$ st = substr($ text,$ beg,100); 50%的几率可以得到string末尾的一半字符)

这样做:

 $postion_degin = strpos($text, $first_symbol); $postion_end = strpos($text, $last_symbol); $len = $postion_end - $postion_degin +1; $st = substr($text, $postion_degin, $len); 

100%的结果

没有mb_substr

我希望这个解决scheme能帮助你,因为它对我有很大的帮助。

 <?php if(mb_strlen($post->post_content,'UTF-8')>200){ $content= str_replace('\n', '', mb_substr(strip_tags($post-> post_content), 0, 200,'UTF-8')); echo $content.'…'; }else{ echo str_replace('\n', '', strip_tags($post->post_content)); } ?>