функция php substr () с utf-8 оставляет � метки в конце
вот простой код
<?php
$var = "Бензин Офиси А.С. также производит все типы жира и смазок и их побочных продуктов в его смесительных установках нефти машинного масла в Деринце, Измите, Алиага и Измире. У Компании есть 3 885 станций технического обслуживания, включая сжиженный газ (ЛПГ) станции под фирменным знаком Петрогаз, приблизительно 5 000 дилеров, двух смазочных смесительных установок, 12 терминалов, и 26 единиц поставки аэропорта.";
$foo = substr($var,0,142);
echo $foo;
?>
и он выводит что-то вроде этого:
Бензин Офиси А.С. также производит все типы жира и смазок и их побочных продук�...
я попробовал mb_substr () без успеха. Как сделать это правильно?
6 ответов
приведенные выше комментарии верны, если на вашем сервере включена mbstring.
$var = "Бензин Офиси А.С. также производит все типы жира и смазок и их побочных продуктов в его смесительных установках нефти машинного масла в Деринце, Измите, Алиага и Измире. У Компании есть 3 885 станций технического обслуживания, включая сжиженный газ (ЛПГ) станции под фирменным знаком Петрогаз, приблизительно 5 000 дилеров, двух смазочных смесительных установок, 12 терминалов, и 26 единиц поставки аэропорта.";
$foo = mb_substr($var,0,142, "utf-8");
вот документы php:
правильная (логическая) Альтернатива для строк unicode;
<?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-Manual
PHP5 не понимает UTF-8 изначально. Он предлагается для PHP6, если он когда-либо выйдет.
использовать многобайтовые строковые функции для безопасного управления строками UTF-8.
например, mb_substr()
в вашем случае.
никогда не используйте константу в функции substr для строки UTF-8: $st = substr($text, $beg, 100); 50% шанс, что вы получите половину символа в конец строки)
делаю так:
$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
Я надеюсь, что это решение поможет вам, как это помогло мне много.
<?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));
}
?>
Если ваши строки могут содержать символы Unicode (многобайтовые), и вы не хотите их разбивать, замените substr
С одним из двух, в зависимости от того, что вы хотите:
предел 142 символов:
mb_substr($var, 0, 142);
предел 142 байт:
mb_strcut($var, 0, 142);