• ベストアンサー

substrのバグ??

質問があるのですが、よろしくお願いします。 perlのsubstrを使って、 $d = substr ($d,0,230); などどした時に、$dのデータ量が多いと(例えば500Byteほど)、なぜか取り出したデータの末尾に「・」のような、文字が追加されてしまうことがあるのです。substrを実行したあとに、print $d などとして、ブラウザ上に表示させようとすると「・」が、その末尾に表示されてしまいます。 これはどういった作用によるものなのでしょうか??バグなのでしょうか??どなたか分かる方いらっしゃいましたらご教授よろしくお願いします。

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

  • ベストアンサー
  • Yeti21
  • ベストアンサー率47% (396/830)
回答No.2

元々perlが全角文字などを意識していないので混在の場合は難しいですね。 以下のサイトのようにコードで判定するのが早そうです。 http://www.din.or.jp/~ohzaki/perl.htm#JP_Cut http://d.hatena.ne.jp/shag/20060718 特に一つ目のURLは他にも全角半角を判定して文字単位に配列に格納するとか、 結構参考になりそうな記述が多いと思います。

miraikako
質問者

お礼

jcode.plを使うことで解決出来ました! ありがとうございます!感謝致します。

その他の回答 (1)

  • Yeti21
  • ベストアンサー率47% (396/830)
回答No.1

全角或いは、全角半角混在の文字列に対してsubstrを使っていないでしょうか? JPerlでなければ全角1文字が2文字とカウントされて思わぬところで切れたりしますが、 それが原因ではないでしょうか? つまり、最後の全角文字が半分で切れているのではないでしょうか?

miraikako
質問者

補足

回答ありがとうございます! おっしゃる通り、全角半角混在の文字列に対して使用していました。 もしよろしければ、どのようなコードを追加すればこの問題を解決できるか教えて頂けないでしょうか?よろしくお願いしますm(__)m

関連するQ&A