Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
mb_convert_encodingとmb_convert_variablesのautoが違う
Search
てきめん tekimen
PRO
April 12, 2023
Programming
0
490
mb_convert_encodingとmb_convert_variablesのautoが違う
#phpstudy 2023年4月12日
てきめん tekimen
PRO
April 12, 2023
Tweet
Share
More Decks by てきめん tekimen
See All by てきめん tekimen
PHP Internals わいわい #3 mb_*関数を作ってみよう
youkidearitai
PRO
0
66
Windows版php-srcデバッグ方法
youkidearitai
PRO
1
62
PHP Internals わいわい #1 の資料
youkidearitai
PRO
1
1.2k
mb_trim関数を作りました
youkidearitai
PRO
1
860
PHPの次期バージョンはこの時期どうなっているのか - Internalsの開発体制について - PHPカンファレンス小田原
youkidearitai
PRO
1
730
文字とはなにか - PHPの文字コード処理について - PHP Lovers Meetup #5
youkidearitai
PRO
1
270
はじめてのOSSコントリビュート
youkidearitai
PRO
11
4k
文字とはなにか - PHPの文字コード処理について -
youkidearitai
PRO
0
780
現在のmbstringの立ち位置 これからどうなっていくのか
youkidearitai
PRO
0
360
Other Decks in Programming
See All in Programming
DomainException と Result 型で作る型安全なエラーハンドリング
karszawa
0
720
보일러플레이트 코드가 진짜 나쁜 건가요?
gaeun5744
0
370
ニックトレイン登壇資料
ryotakurokawa
0
140
Agentic Applications with Symfony
el_stoffel
1
110
List とは何か? / PHPerKaigi 2025
meihei3
0
560
AI時代のプログラミング教育 / programming education in ai era
kishida
23
21k
PHPUnit 高速化テクニック / PHPUnit Speedup Techniques
pinkumohikan
1
1.2k
20250326_生成AIによる_レビュー承認システムの実現.pdf
takahiromatsui
17
5.7k
いまさら聞けない生成AI入門: 「生成AIを高速キャッチアップ」
soh9834
12
3.9k
家族・子育て重視/沖縄在住を維持しながらエンジニアとしてのキャリアをどのように育てていくか?
ug
0
250
リアルタイムレイトレーシング + ニューラルレンダリング簡単紹介 / Real-Time Ray Tracing & Neural Rendering: A Quick Introduction (2025)
shocker_0x15
1
130
AHC 044 混合整数計画ソルバー解法
kiri8128
0
300
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Code Reviewing Like a Champion
maltzj
522
39k
Side Projects
sachag
452
42k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.3k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
46
2.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
30k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
12
620
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
51
2.4k
Building Adaptive Systems
keathley
41
2.5k
Site-Speed That Sticks
csswizardry
4
450
Transcript
mb_convert_encodingと mb_convert_variablesのautoが 違う
自己紹介 てきめん • https://tekitoh-memdhoi.info • @youkidearitai • https://www.youtube.com/use r/tekitohmrp •
https://www.nicovideo.jp/user /2957748 • https://github.com/youkideari tai • オレ
早速見ていきましょう https://3v4l.org/tadVr
違いますね • 何ならエラーメッセージすら違いますね – mb_convert_variables(): Unable to detect encoding –
mb_convert_encoding(): Unable to detect character encoding
mb_convert_encodingのマニュアル • string を解釈するのに使われている 現在の文字 エンコーディング。 配列またはカンマ区切りの文字 列とすることで、 複数のエンコーディングを指定で きます。
この場合、正しいエンコーディングを mb_detect_encoding() と同じアルゴリズムで推 測します。 https://www.php.net/mb_convert_encoding
mb_convert_variablesのマニュアル • from_encoding には配列またはカンマ区切りの文 字列を指定し、 from-coding からエンコーディング の検出を試みます。 from_encoding が省略された
場合、detect_order を使用します。 なんか説明が違う https://www.php.net/mb_convert_variables
よくわからないので、php-srcの奥深くへと入っていく ことにした
mb_convert_encodingでは • $from_encodingに”auto”を指定した時、この関 数にやってくる – mb_detect_encodingと同じ関数を使っている
mb_convert_variablesでは • 何やら違う自動判定が 始まった – マニュアルによると「エ ンコーディング検出の ために Array または
Object の文字列を結 合します。」とある
とりあえず、違うことはわかりました • なるべく”auto”は使わないでくださいね – 使ってる文字コードはわかるようにしておきましょう – というか、2023年現在新たに使う人がいるのだろうか? – となると既存システムだよね多分となる
もうちょっと深ぼっていく 何故かSJISに変換できている mb_detect_orderにSJISが載っていないのに https://3v4l.org/CtI1k
なんでこれに気がついたの • Major overhaul of mbstring (part 33)にて気づく – PHP
8.2まででは(mb_detect_order関係なし に)mb_detect_encodingが一番近いエンコーディングを返 すようにしてた – PHP 8.3ではmb_detect_orderに沿ったリストに基づいて変 換されるようになる – なので、PHP 8.3にアップグレードしようとする未来の人々は気 をつけてね(一応UPGRADINGファイルにも記述してもらった)
もうちょい • mbstring.strict_detectionオプションを1にする ことで、厳密な検出ができるようになる – どっちにしても使わないほうが良いです – 繰り返しますが、使っている文字コードはわかっているよ うにしましょう •
今だったらほとんどUTF-8でいい(はず)
おわり ご清聴ありがとうございました