にっき

2008/06/29 23:35:18

mb_substr と mb_strcut


なんだかもうなべあつさんやらえどさんみたいな一発芸屋さんはごちそうさまな気がするにゃぁ・・・
とりあえずおやすみなのに6時前に起こされるのももう遠慮したいところにう(つx;【みかん
そんなことはおいといて☆
入力した文字列がばりで〜たを通過した後に途中で切られちゃってるから追跡した結果
strcut って関数が原因っぽいにう・・・
文字数制限するとしても普段は mb_substr を使ってたからよく知らない関数だったけど
引用:
mb_strcut() は、mb_substr() と同じ処理を異なった方法で行います。
こんなこと描いてあるのに実際の動作は違う気がするにう(つx;【みかん
ってことで実験してみたけど・・・



<?php

define('TEST_ENCODING','UTF-8');
define('TEST_STRING','うにうにふにふに');
define('TEST_OFFSET',0);
define('TEST_LENGTH',4);

mb_internal_encoding(TEST_ENCODING);
header('Content-Type: text/plain; charset=' . TEST_ENCODING);

echo mb_substr(TEST_STRING,TEST_OFFSET,TEST_LENGTH),"\n";
echo mb_strcut(TEST_STRING,TEST_OFFSET,TEST_LENGTH),"\n";

?>
こんなかんじのすくりぷとを創って実行してみると
うにうに
う
・・・もう違うとかそんなれべるじゃない気がするにう(´・ω・`;【みかん
念のため文字こ〜どを EUC-JP にしてりとらい☆
うにうに
うに
それなら SJIS で
うにうに
うに
ばっちりだめっぽいにう(´・ω・`;【みかん

けっきょくよくわかんなかったから PHP5.2.6 のこ〜どを追いかけてみたら

/ext/mbstring/mbstring.c L2074-
/ext/mbstring/libmbfl/mbfl/mbfilter.c L1055-
に mb_substr の入口と本体があって

/ext/mbstring/mbstring.c L2166-
/ext/mbstring/libmbfl/mbfl/mbfilter.c L1214-
に mb_strcut の入口と本体を発見☆

diff して違いを見てみたけど,mb_strcut は文字の途中で切らないようにしてても
ばいと単位で切抜きしてるから length == 文字数 にはならないにう(´・ω・`;【みかん

たぶんきっと DB の char 型が 1桁 == 1byte だった頃の負の遺産かにゃぁ・・・
でもまるち DB にしようとするとそっちにしないとなのかなぁ?
1桁 == 1文字 で DB 創ってあるからなんだかにう(´・ω・`;【みかん
何事もなく mb_substr に替えちゃっておっけぃかにゃぁ・・・


こめんと

こめんとする?



 
投稿された内容の著作権はこめんとの投稿者に帰属するっぽいです☆
また,現在 IE6 以下で Sleipnir,Lunascape,Donut じゃないゆ〜ざえ〜じぇんとからの描き込みを制限してますです☆
該当しちゃうかたはてきとうにゆ〜ざえ〜じぇんとを偽装しちゃってくださいです(´ω`;【みかん
さぶこんてんつ
前月 2024年 4月 翌月
  1
 
2
 
3
 
4
 
5
 
6
 
7
 
8
 
9
 
10
 
11
 
12
 
13
 
14
 
15
 
16
 
17
 
18
 
19
 
20
 
21
 
22
 
23
 
24
 
25
 
26
 
27
 
28
 
29
 
30
 
       
             
  • あじ あじ
  • ED ED
  • えでん えでん
  • えれふぃ えれふぃ
  • ぐらぶれ ぐらぶれ
  • etc etc
  • にっき にっき

あわせて読みたい

先頭に戻る
めにう 先頭に戻る