FREE GAZA ! FREE PALESTINE ! STOP GENOCIDE ! Elementorはイスラエルの企業 Elementorはもう使わない
エディターならDivi!Divi最高!

e-addons QUERY POST $contentの先頭から100文字を表示で文字化け発生!日本語はマルチバイト!

投稿一覧、ポストリストならe-addonsを使ってください!とっても便利だけどマルチバイト言語は気を付けて!

e-addons for Elementor

もう何度もとりあげているe-addons。イタリア製の素晴らしいElementorアドオンなんだが、イタリア語ってシングルバイトの文字じゃないですか!

e-addons QUERY POSTで投稿一覧をアチコチに配置してるんですけど、いわゆる$contentの部分を先頭から100文字使いたいねぇ。参照したいねぇってなるではないですか!

e-addonsは先頭からも文字参照はシングルバイト文字のsubstrで処理してるんやねぇ。だからマルチバイト、日本語、ハングル、広東語とかは文字化け起こすんじゃ!ってことで今回はこのe-addons QUERY POSTで文字を参照するときに発生する文字化けを駆逐します。

これは独自に行っているのでe-addonsの公式的にはやってほしくないんだと思うんだよね。なんで「自助」「自己責任」とは言いたくないので、「知識のない人は真似しないで!」でお願いします。

e-addons QUERY POSTの設定。デザインは7種類あって、自作のセクションも利用できる。まあ、いじる場所が多いんですね。その分、他の人とは違ったことができちゃいます。いいでしょ!

普通に使うと文字化け発生!substrで参照すると日本語は文字化けしちゃうんですよ!

日本語はマルチバイトとシングルバイトの英字が混在しつつ利用される。処理の参照をする部分がマルチバイトなのにも関わらず、sunstrでカットすると変数として特にエラーも発生はしないで変数として保持はできるが、出力する段階になってUTF-8では表示ができない、というか置き換えができない「REPLACEMENT CHARACTER (U+FFFD)」になってしまい、レンダリングの段階でひし形ハテナになってしまうとうことらしい。

e-addons QUERY POSTの設置部分。最後の参照が失敗していて、ひし形のハテナマークがでてます。
うまい具合に文字数がピッタリだといいんだけど、マルチバイト部分を1バイトだけ参照したりすると文字化けが発生する。

とある場所…substrをmb_substrに変更するとオッケー!グッド!

英語圏のコードを流用したりプラグインを使ったことがある人は、このたぐいの文字化けは日常でしょうかね?

これは、コードのどこかにある「substr」を「mb_substr」に置き換えれば解決する問題。でもって、e-addonsのコード内を検索すると、どうも「\e-addons-for-elementor\modules\query\skins」にあるbase.phpの1023行目が怪しい

※2021年7月6日にアップデートがあり、該当箇所が変更に。base.php内で「substr」を検索して「mb_substr」に変更をしてください。

下記が該当部分を抜粋したコード

				
					        if (strlen($content) > $limit) {
            $content = substr($content, 0, $limit) . $extra; //
            // TODO preserve words
        }
				
			

ということで該当部の「substr」を「mb_substr」に置き換えて解決!

該当部分はe-addonsのコアなので、アップデートするとコードが上書きされる可能性がある。企業サイトなどの場合はアップデートを止めておくといいだろう。

自分個人サイトで使ってるのでアップデート、どんとこい超常現象!文字化けしたら検索してまたなおすぜ!

投稿一覧、POSTリストで参照する文字数を変更したい場合は、「Number of characters」の数値を変更すればよい。

関連の投稿

カテゴリー

タグ

FREE GAZA ! FREE PALESTINE ! STOP GENOCIDE ! Elementorはイスラエルの企業 Elementorはもう使わない
エディターならDivi!Divi最高!

お問い合わせ

当サイトの内容などで疑問・質問があればご利用ください。