Dittoで出力文字数をlimitで指定する場合の罠。 | MODxでハマるありがちな罠と解決法

Dittoで出力文字数をlimitで指定する場合の罠。

日本語環境だと、例えば、出力するテンプレート変数に日本語が入っていた場合、limit=50とかにすると、文字列によっては、末尾がバイト欠けして文字化けします。
また、文字数もバイト指定になってしまいます。

これは、Ditto内に標準で入っているPHxの関数が、substr()を使用しているためで、これはマルチバイト関数ではないので、日本語だとおかしくなる場合があります。

ですので、直してしまいましょう。(mbstringが使えないとダメですが。)

/assets/snippets/ditto/classes/phx.parser.class.phpの258行目。

$output = substr($output,0,$limit);

$output = mb_substr($output,0,$limit);
に修正。

これでマルチバイトで文字数を指定できます。

PHxを導入している場合はこちらも直しましょう。直す箇所は同一です。
/assets/plugins/phx/phx.parser.class.phpの258行目。

$output = substr($output,0,$limit);

$output = mb_substr($output,0,$limit);
に修正。


作成日
2009.12.30 (水)
最終更新日
2010.02.09 (火)
作成者
Takayuki Hirosawa
  • speed_fish 引っ越ししてからつなげていなかったとても古いnetgearのnas。今日つなげようとしたらlan経由で全くつながらず。windows10が勝手にsmb1を切り捨ててたと判明するまでに3時間。httpでもpingでもつながるのにos… https://t.co/Ejd7om16t0 2018-04-24 11:41:09
  • speed_fish modxからevoが切り離しかー。まあrevoとはもう別物感溢れてたし良いんじゃないでしょうか。やりやすくなるといいなー。 2017-04-28 20:33:09
  • speed_fish Chromeの57から頻発している、ERR_BLOCKED_BY_XSS_AUDITOR。試してみたけど、hidden含め入力項目にJavaScriptが入っても発生。HTTPS化していないフォームはまあ当然発生かな。 2017-04-10 18:00:57
  • speed_fish modxサイトをcloudflare化でeFormで引っかかる。中身みたらsite_urlでリファラーチェックしてました。ssl flexibleを使おうとしてたので、eFormを改造。パラメータにsiteurlを追加しましたとさ。#modx #cloudflare #eform 2017-03-04 00:44:09
  • speed_fish メモメモ。MODxでAMP対応するスニペット。 GETのURLが気に食わないのでリライトかな。 https://t.co/Oa9qzQ5dOr 2017-02-03 01:10:54