web-dev-qa-db-fra.com

fonction php substr () avec utf-8 des marques à la fin

Voici un code simple 

<?php

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

$foo = substr($var,0,142);

echo $foo;
?>

et il produit quelque chose comme ceci:

Ензин Офиси А.С. À propos de nous Nous contacter.

J'ai essayé mb_substr () sans succès. Comment faire cela de la bonne façon?

44
Nazar

Les commentaires ci-dessus sont corrects tant que mbstring est activé sur votre serveur.

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

$foo = mb_substr($var,0,142, "utf-8");

Voici la documentation php:

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

89
Kai Qing

Une alternative appropriée (logique) pour les chaînes 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
?>

Utilisez le PHP: mb_substr - Manual

5
Botir Ziyatov

PHP5 ne comprend pas UTF-8 de manière native. Il est proposé pour PHP6, si jamais il en sortait.

Utilisez les fonctions de chaîne multibyte pour manipuler les chaînes UTF-8 en toute sécurité.

Par exemple, mb_substr() dans votre cas.

3
thwd

Si vos chaînes peuvent contenir des caractères Unicode (multi-octets) et que vous ne voulez pas les rompre, remplacez substr par l’un des deux suivants, selon votre choix:

Limiter à 142 caractères :

mb_substr($var, 0, 142);

Limiter à 142 octets :

mb_strcut($var, 0, 142);
2
caw

N'utilisez jamais une constante dans la fonction substr pour la chaîne UTF-8: $ st = substr ($ text, $ beg, 100); 50% de chances d'obtenir la moitié d'un caractère à la fin de la chaîne)

Fait comme ça:

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

Résultat 100%

Non mb_substr

2
usergio

Si vous souhaitez utiliser la fonction strlen, pour calculer la longueur de chaîne que vous souhaitez renvoyer et que votre chaîne $Word possède un encodage UTF-8, vous devez utiliser la fonction mb_strlen():

$foo = mb_substr($Word, 0, mb_strlen($Word)-1);

0

J'espère que cette solution vous aidera car elle m'a beaucoup aidé.

<?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));
}
?>
0
Jodyshop