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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
てきめん tekimen
PRO
April 12, 2023
Programming
630
0
Share
mb_convert_encodingとmb_convert_variablesのautoが違う
#phpstudy 2023年4月12日
てきめん tekimen
PRO
April 12, 2023
More Decks by てきめん tekimen
See All by てきめん tekimen
PHP Internals わいわい #3 PIEを使ってみよう
youkidearitai
PRO
0
51
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
290
Limit of code point for grapheme cluster in programming language side.
youkidearitai
PRO
0
71
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
2
3.4k
PHP 8.5の裏話
youkidearitai
PRO
0
140
CJK and Unicode From a PHP Committer
youkidearitai
PRO
0
310
PHP Internals わいわい #3 mb_*関数を作ってみよう
youkidearitai
PRO
0
160
Windows版php-srcデバッグ方法
youkidearitai
PRO
1
120
PHP Internals わいわい #1 の資料
youkidearitai
PRO
1
1.6k
Other Decks in Programming
See All in Programming
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
570
Spec-Driven Development with AI-Agents: From High-Level Requirements to Working Software
antonarhipov
1
160
How We Practice Exploratory Testing in Iterative Development( #scrumniigata ) / 反復開発の中で、探索的テストをどう実施しているか
teyamagu
PRO
3
970
AWSはOSSをどのように 考えているのか?
akihisaikeda
0
130
ローカルLLMでどこまでコードが書けるか / How much code can be written on a local LLM
kishida
2
370
Modding RubyKaigi for Myself
yui_knk
0
240
🦞OpenClaw works with AWS
licux
1
370
サーバーレスで作る、動画データ管理基盤
oyasumipants
0
230
横断組織出身のQAEがインプロセスQAEでつまずいたこと・活かせたこと
ty89
0
160
Stage 3 Decorators でできること / できないこと / TSKaigi 2026
susisu
0
150
Agentic UI beyond Chats Architecture Patterns & Open Standards @ngMunich 05/2026
manfredsteyer
PRO
0
110
ついに来た!本格的なマルチクラウド時代の Google Cloud
maroon1st
0
460
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.9k
Rails Girls Zürich Keynote
gr2m
96
14k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.2k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
560
Bash Introduction
62gerente
615
210k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Abbi's Birthday
coloredviolet
2
7.6k
Docker and Python
trallard
47
3.8k
Building Applications with DynamoDB
mza
96
7k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.4k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Balancing Empowerment & Direction
lara
6
1.1k
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でいい(はず)
おわり ご清聴ありがとうございました