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
270
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
mb_trim関数を作りました
youkidearitai
PRO
1
340
PHPの次期バージョンはこの時期どうなっているのか - Internalsの開発体制について - PHPカンファレンス小田原
youkidearitai
PRO
1
270
文字とはなにか - PHPの文字コード処理について - PHP Lovers Meetup #5
youkidearitai
PRO
1
140
はじめてのOSSコントリビュート
youkidearitai
PRO
11
3k
文字とはなにか - PHPの文字コード処理について -
youkidearitai
PRO
0
450
現在のmbstringの立ち位置 これからどうなっていくのか
youkidearitai
PRO
0
150
PHP 8.3のmbstringの進化を見てください - コントリビューターとしてのかかわり -
youkidearitai
PRO
0
840
PHP 8.2と8.1で取り込まれたプルリクエストについて
youkidearitai
PRO
0
250
非公式mbstringレビュアー 12月と1月
youkidearitai
PRO
0
96
Other Decks in Programming
See All in Programming
Reactive Java REST APIs, FTW? Virtual JUG 2024
mraible
PRO
0
400
Datadogのmonitorを Terraform管理に爆速で 移行する
kuro_kurorrr
2
280
「ソフトウェア設計」のドメイン - 「データモデリングでドメインを駆動する」を読んで
hidenorigoto
6
2k
From LALR to IELR: A Lrama's Next Step
junk0612
2
1.3k
Google Analytics でサイト速度を計測する / Measure site speed with Google Analytics
forrep
2
110
コンパウンドプロダクト開発の質とスピードを支える Protobuf と Connect #アーキテクチャ_findy / Boosting Compound Product Development Efficiency with Protobuf and Connect
izumin5210
12
650
의존성 주입과 Dagger Hilt
fornewid
0
110
TypeScript Custom GitHub Action Development Tips
peaceiris
4
1k
Upgrading Legacy to the Latest PHP Version
afilina
PRO
0
160
Goでリフレクションする、その前に / Kansai.go #1
utgwkk
4
510
The Frontend Rubyist
largo
0
480
RubyKaigi参加歴をふりかえる / Looking Back on My RubyKaigi Participation History #kaigieffectLT
expajp
2
230
Featured
See All Featured
Music & Morning Musume
bryan
42
5.7k
The Invisible Customer
myddelton
114
12k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Fashionably flexible responsive web design (full day workshop)
malarkey
399
65k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
136
41k
The Art of Programming - Codeland 2020
erikaheidi
43
12k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
12
1.1k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
9
1.4k
Making Projects Easy
brettharned
109
5.6k
Reflections from 52 weeks, 52 projects
jeffersonlam
345
19k
Product Roadmaps are Hard
iamctodd
45
9.8k
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でいい(はず)
おわり ご清聴ありがとうございました