dポイントプレゼントキャンペーン実施中!

マルチバイトの文字を検索して最初に現れる文字までの数を出力させたいのですが、
例えば下記の文、「検」、「国」の場合4と8が出力されなかればならないのに12と24となって
しまいます。他にも「の」や「本」を試してみましたが全て3倍になって返ってきます。

初心者サイトを見てもプログラム自体は問題ないと思うのですがどうして本来出力されるべき数の3倍の数が返ってくるのでしょうか。
ちなみにマルチバイトではなく半角英数字をstrposで検索すると正しい数が表示されました。
マルチバイトの文字列を検索したいのですがどうしても上記のような状況になり解決できません。
どなたか理由に心当たりあるかたいますでしょうか・・。

<?php
$haystack = "日本語の文字列を検索。日本語検索。";
var_dump(mb_strpos($haystack, "文"));
var_dump(mb_strpos($haystack, "検"));

?>
結果
int(12) int(24)






$string = "日本語の文字列を検索。日本語検索。";

$abc73=mb_strpos($string, "の");
echo"$abc73";
結果 9

「の」を「本」にすると結果は3となりなります。

A 回答 (2件)

まぁ環境かえないでもmb系の関数を実行するより前に


mb_internal_encoding("UTF-8");
を実行すればたいてい解決すると思います

http://php.net/manual/ja/function.mb-internal-en …
    • good
    • 0

文字のエンコーディングが正しくセットされていません。



案1:/etc/php.ini に下記を書く。
mbstring.internal_encoding = UTF-8

案2:スクリプトの先頭の方で下記を書く。
ini_set("mbstring.internal_encoding","UTF-8");

案3:mb_strpos($haystack, "文",0,"UTF-8") とする。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!