2017-02-24 3 views
0

3文字までの文字列を切り抜きたい。そうすることで、$name_short = substr($name, 0, 3);を使用すると効果的です。しかし、テキストに最初の3文字の中にä、öまたはüのようなドイツ語のUmlauteが含まれている場合、たとえばWürzburgW &uに短縮されます。 $name_short = substr(html_entity_decode($name), 0, 3);を使用するとうまく動作し、Umlauteが保持されますが、結果はWür(Würzburgの場合)ではなく、です。 /私のコードは、最初の3文字の中に他の言語のUmlauteやその他の特殊文字があるかどうかを正しく確認する方法はわかりません。特殊文字が発見された場合、これはそれが仕事作っドイツ語のような特殊文字を持つPHPのsubstr Umlauteä、ö、ü

は、だから私は3

にそれ以外の場合は、4文字までの文字列を切り取ることができます:あなたの助けを

$name = html_entity_decode($name); 
$name_short = mb_substr($name, 0, 3); 

感謝を!

+6

http://php.net/mb_substr –

+0

'がhtml_entity_decode()'とは何の関係もありませんこれは、Unicode(UTF)があなたの設定でどのように動作するか、また、 "マルチバイト文字列関数" PHPの利点を利用する方法を理解するために気を付けたいと思います。それについての公式の文書があります。トピックに読んで意味を持ちます... – arkascha

答えて

1

するTry mb_substr()の代わりにSUBSTRの()以下のように:

 

     $name = "Würzburg"; 
     $name_short = mb_substr($name, 0, 3); 

+0

これはあなたが書いたとおりに動作します。しかし、 "Würzburg"は変数から来て、結果はまだ "W&U"です。 – vloryan

+0

こんにちは、古いバージョンのPHP(5.6未満)を使用している可能性があります。これは、PHP 5.6とPHP 7.0で動作します。 –

0

これは、エンコーディングの問題になる可能性があり...

あなたは問題が(たとえばä、ö、ü、œおよび他のような)これらの特殊文字を複数使用という事実から来ているmb_substr($name,0,3,'UTF-8');

0

を試すことができます1バイトより大きい。したがって、substr()を使用して得られる結果は、3バイトの長い文字列を返すため、技術的に正しいです。 @arkaschaが述べたように、それは特殊文字には影響を与えないよう、あなたの状況であなたを助けにはなりませんhtml_entity_decode()を使用して、また、 $name_short = mb_substr($name, 0, 3);

:その問題を解決する必要がある関数のマルチバイトバージョンを使用して

mb_substr DOC:http://php.net/manual/en/function.mb-substr.php

関連する問題