fgetcsvでShift-JIS文字コードのCSVを読むと、文字列がShift-JISのままの配列が返ってくるため、UTF-8を基本的な文字コードに据えたシステムでただ不便というだけにとどまらず、SJISのCSVをfgetcsvで直接読み取るのは「5C問題」のため危険である。 本稿では、ストリームフィルタを使ったSJIS CSVの安全な読み込み方法を紹介する。なお、本稿で作るストリームフィルタの完成形はGitHubで公開する。 5C問題とは よく見かける次のような実装は5C問題のため、データによっては読めないものが出てくる危険性がある: $fp = fopen('sjis.csv', 'r'); while ($row = fgetcsv($fp) !== false) { // fgetcsvで読み取った後に、文字コードを変換している mb_convert_variables('UTF
![PHP: fgetcsvでもSJISのCSVをUTF-8として《安全》に読む方法(ストリームフィルタ使用) - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/1303534a51383bebf214a2ae9c46979926bfac2b/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9UEhQJTNBJTIwZmdldGNzdiVFMyU4MSVBNyVFMyU4MiU4MlNKSVMlRTMlODElQUVDU1YlRTMlODIlOTJVVEYtOCVFMyU4MSVBOCVFMyU4MSU5NyVFMyU4MSVBNiVFMyU4MCU4QSVFNSVBRSU4OSVFNSU4NSVBOCVFMyU4MCU4QiVFMyU4MSVBQiVFOCVBQSVBRCVFMyU4MiU4MCVFNiU5NiVCOSVFNiVCMyU5NSUyOCVFMyU4MiVCOSVFMyU4MyU4OCVFMyU4MyVBQSVFMyU4MyVCQyVFMyU4MyVBMCVFMyU4MyU5NSVFMyU4MiVBMyVFMyU4MyVBQiVFMyU4MiVCRiVFNCVCRCVCRiVFNyU5NCVBOCUyOSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1jbGlwPWVsbGlwc2lzJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ZjAwYzhmZjg2ZTZjY2UxMDE2NTRiYjRhNmRjZjBiOGU%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwc3VpbiZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9NGFlNjk2NWUyOWFiNjg4MmRlNmViY2E4NDc2NWMxMjA%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D339e2fa13d4c792e688006be3a424a2f)