2012-01-31 1 views
40

でマークを残し、単純なコードPHPのSUBSTR()関数は、ここで終わり

<?php 

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

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

echo $foo; 
?> 

あり、それはこのようなものを出力:

БензинОфисиА.С.を私はmb_substr()を運行しませんでした。私はmb_substr()を使ってみました。どのようにこれを正しい方法で行うには?

+0

'mb_substr()'が行く方法です、これはマルチバイト文字が半分になると起こります。あなたはそれで試したことと失敗した方法を示すことができますか? –

+3

'mb_substr'を試したときにエンコード(最後のパラメータ)を指定しましたか? –

+0

私がやろうとしたことはまさにそれです。私はインターネット上にそれを持っていないので、私はリンクを提供することはできません。その会社の長い説明、それは1つのウェブサイトのホームページに表示するために長さが142文字になるようにカットされています。 – Nazar

答えて

81

上記のコメントは、サーバー上でmbstringを有効にしている限り正しいです。ここで

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

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

は、PHPのドキュメントです:

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

+0

ありがとうございます!私が見逃した最後の議論は "UTF-8"でした、そして、私はドキュメンテーションを見ました。 – Nazar

3

PHP5はネイティブにUTF-8を認識しません。それが出てきたらPHP6のために提案されています。

multibyte string functionsを使用して、UTF-8ストリングを安全に操作します。

たとえば、mb_substr()(あなたの場合)

4

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

+0

'mb_substr($ str、$ s、$ l、 'UTF-8')'は本当の正しい代替手段です...!正しく指定されたキャラクタ・セットがなければ、その結果はどのようなものなのでしょうか。 – deceze

2

はUTF-8文字列SUBSTR関数で定数は使用しないでください使用します。 $ ST = SUBSTR($テキスト、$ 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

+0

カットしたい文字が分かっていれば気になりません。あなたが持っていたい場合は、ランダムな文字列の最初の3文字を言うとしましょう、それは良いことではありません。正しい方法はmb_substrです。 – Eir

0

私はこのソリューションの助けあなたを願っていますそれは私に多くの助けとなりました。

<?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)); 
} 
?> 
関連する問題