「lz-string」ライブラリで圧縮した文字をPHPで展開する際に文字化けする場合の対応方法
以前、JavaScript / PHPにて「lz-string」を用いてデータの圧縮・展開する方法をメモし、この方法で基本的には圧縮・展開できていたものの特定の文字列の場合に文字化けが発生した。以下に対応方法をメモ。
症状
JavaScript側で「あああああ」という文字列をcompressToEncodedURIComponentでURLエンコード&圧縮すると「」になり、これをPHP側でLZString::decompressFromEncodedURIComponentでURLデコード&展開すると「ああ�ああ」のように文字化けした。
ただ、こちらのようなオンラインツールだと正常に展開される。
対応方法
JavaScript
<script src="https://cdn.jsdelivr.net/npm/lz-string@1.5.0/libs/lz-string.min.js"></script> <script> const text = `あああああ`; // URLエンコード -> lz-string圧縮してBase64変換 -> 再度URLエンコード const base64_encode = encodeURIComponent(LZString.compressToBase64(encodeURIComponent(text))); // KQUQzMAcCMUEygjeiq0g8aVeRoA%3D console.log(base64_encode); </script>
PHP
<?php require_once __DIR__ . '/../../../vendor/autoload.php'; use \LZCompressor\LZString; $encode_text = 'KQUQzMAcCMUEygjeiq0g8aVeRoA%3D'; $decode_text = urldecode(LZString::decompressFromEncodedURIComponent($encode_text)); var_dump($decode_text); // string(15) "あああああ"
所感
Base64変換が入る分、圧縮率は下がるもののある程度は圧縮されるので今後はこちらの方法を使っていく。
関連記事
-
-
HTMLにてaタグクリック時にping属性のデータをPHPで受け取る方法
HTMLのaタグにping属性というものを設定できるらしく、設定したリンクをクリ ...
-
-
Composer自体のインストールとmonolog及びTwigをComposer経由でインストールする方法
「Composerで○○をインストール」というのをよく見かけるがComposer ...
-
-
PHPでランダムな値を取得したいケース諸々の対応方法
テストデータを作成する際にランダムな値を入れたかったけど、色々ケースがあったので ...
-
-
Stripe Checkoutにてクレジットカード決済の際に3Dセキュア対応にする方法
先日Stripe Checkoutを用いたクレジットカード決済機能についてメモし ...
-
-
PHPでエラーログ等のログファイルから指定した行数を表示させる方法
エラーログを最新分から指定行数表示させる プログラムがあって、どういった作りにな ...