• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:mb_strlenが ローカルでは正常なのに、サーバー上ではおかしい)

mb_strlenがローカルとサーバーで異なる挙動をする問題について

このQ&Aのポイント
  • ウィンドウズのローカル環境で開発したページをレンタルサーバーにアップロードした際、mb_strlen関数の動作が異なる問題が発生しています。ローカル環境では正常に動作していたmb_strlen関数が、サーバー上では文字数を少なく見積もって値を返してしまう状況です。
  • また、その他の問題として、特定のページだけ文字化けした値がデータベースから取得されるという状況も報告されています。
  • この問題に関して、php.iniファイルの設定を確認する必要がありますが、具体的な設定箇所がわからず、どのように修正すれば良いか迷っています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

【mb_strlen】 mb_*****関数は デフォルトの文字コードを見て処理するので レンタルサーバと自宅環境で見ている文字コードが違うのだと思います。 手っ取り早い方法としては、 mb_internal_encoding('UTF-8'); などとしてやればいいと思います。 また、 mb_strlen('文字', 'UTF-8'); と、第二引数に文字コードを指定すれば、正しい結果が返ります。 ただし、「大幅に少なく見積もって値を返す」と仰っているのが気になります。 mb_strlenは全角も半角も1文字として取得する関数です。 もし、入力された文字数ではなく、入力された文字のバイト数をお求めなら、strlen関数を利用する必要があります。 【データベース】 単純にアウトプット先のHTML(phpスクリプトとかも)がUTF-8になっておらず文字化けしているだけではないですか。 一度確認してみてください。

n-yuuki
質問者

お礼

詳しい回答有難うございます。 そして、お返事が遅くなり申し訳ございません。 mb_strlen('文字', 'UTF-8'); と対応すれば、全て上手くいきました。 また、データーベースの件ですが、 これも、 mb_strlen('文字', 'UTF-8'); とすれば、文字化けは回避できました。 本当に助かりました。有難うございます。

すると、全ての回答が全文表示されます。

関連するQ&A