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
250
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
58
PHPの次期バージョンはこの時期どうなっているのか - Internalsの開発体制について - PHPカンファレンス小田原
youkidearitai
PRO
1
250
文字とはなにか - PHPの文字コード処理について - PHP Lovers Meetup #5
youkidearitai
PRO
1
120
はじめてのOSSコントリビュート
youkidearitai
PRO
10
3k
文字とはなにか - PHPの文字コード処理について -
youkidearitai
PRO
0
420
現在のmbstringの立ち位置 これからどうなっていくのか
youkidearitai
PRO
0
150
PHP 8.3のmbstringの進化を見てください - コントリビューターとしてのかかわり -
youkidearitai
PRO
0
810
PHP 8.2と8.1で取り込まれたプルリクエストについて
youkidearitai
PRO
0
240
非公式mbstringレビュアー 12月と1月
youkidearitai
PRO
0
96
Other Decks in Programming
See All in Programming
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
170
『Railsオワコン』と言われる時代に、なぜブルーモ証券はRailsを選ぶのか
free_world21
2
460
禅の心を手に入れよ
eltociear
2
460
欠陥を早期に発見するための Software Engineer in Test とその重要性 / What is Software Engineer in Test and How they works
orgachem
PRO
11
890
Open AI APIを使う前に知っておきたいアカウントTier の話
akki_megane
0
120
RailsConf 2024: Riffing on Rails: sketch your way to better designed code
kaspth
0
190
Deep Dive into React Stream/Serialize
mugi_uno
4
840
PHPコードの実行モデルを理解する / Understanding-the-PHP-Execution-Model
shin1x1
0
800
TypeScriptコードの漸進的改善 / Progressive Improvement of TypeScript Code
medley
1
370
哲学史とモデリング
tanakahisateru
2
370
Documentation testsの恩恵 / Documentation testing benefits
ssssota
1
530
GitLab CI/CD で C#/WPFアプリケーションのテストとインストーラーのビルド・デプロイを自動化する
hacarus
0
580
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
165
13k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.1k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
358
22k
Happy Clients
brianwarren
92
6.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
20
1.8k
How to name files
jennybc
65
93k
How GitHub Uses GitHub to Build GitHub
holman
468
290k
Bash Introduction
62gerente
605
210k
Raft: Consensus for Rubyists
vanstee
133
6.3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
275
13k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
245
20k
Art, The Web, and Tiny UX
lynnandtonic
290
19k
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でいい(はず)
おわり ご清聴ありがとうございました