ドキュメントの検索結果での文字化けを修正

MODx 0.9.6.3には、管理画面の「サイト」→「検索」からドキュメントを検索すると、検索結果の日本語が文字化けする問題があります。

検索ページのファイルは/manager/actions/search.static.phpで、このファイルを下記のように修正することで、日本語のタイトルを持つドキュメントでも文字化けしなくなります。

変更前: /manager/actions/search.static.php(105行目~)
	<td><?php echo strlen($logentry['pagetitle'])>20 ? substr($logentry['pagetitle'], 0, 20)."..." : $logentry['pagetitle'] ; ?></td> 
	<td><?php echo strlen($logentry['description'])>35 ? substr($logentry['description'], 0, 35)."..." : $logentry['description'] ;  ?></td>
変更後: /manager/actions/search.static.php(105行目~)
<?php if (function_exists('mb_strlen') && function_exists('mb_substr')) :?>
	  <td><?php echo mb_strlen($logentry['pagetitle'], $modx->config['modx_charset'])>20 ? mb_substr($logentry['pagetitle'], 0, 20, $modx->config['modx_charset'])."..." : $logentry['pagetitle'] ; ?></td> 
	<td><?php echo mb_strlen($logentry['description'], $modx->config['modx_charset'])>35 ? mb_substr($logentry['description'], 0, 35, $modx->config['modx_charset'])."..." : $logentry['description'] ;  ?></td>
<?php else:?>
	  <td><?php echo strlen($logentry['pagetitle'])>20 ? substr($logentry['pagetitle'], 0, 20)."..." : $logentry['pagetitle'] ; ?></td> 
	<td><?php echo strlen($logentry['description'])>35 ? substr($logentry['description'], 0, 35)."..." : $logentry['description'] ;  ?></td>
<?php endif;?>

マルチバイト文字列関数が利用できる場合には、それらを利用して文字列の切り詰めをするように変更しました。ポイントは、$modx->config['modx_charset']で管理画面での文字エンコーディングの種類を取得している点です。これで、他の文字エンコーディングを選択している場合でも(おそらく)文字化けしなくなります。

JIRAにはチケットが上がっていなかったようなので登録しておきました。また、日本語版の開発版では既に修正済みです。

M子