以前Stattraqプラグインを入れて、「HTTPヘッダやMETAタグでUTF-8返しても化ける」なんてことを書きましたが、解決できました。参考にさせていただいたのは以下のサイトです。
MMRT daily life » WP StatTraq 日本語版
ここからリンクされているサイトにもいろいろ情報があり、要は
- 検索文字をmb_convert_encoding()で適切な文字コードに変換する
- htmlentities()の代わりにhtmlspecialchars()を使う
ようにすればOKでした。
結局Capcha!,StatTraqプラグインで書いたindex.phpとaccess_detail.phpでのヘッダ出力の変更の他に、以下の2ファイルを変更しています。
--- wp-stattraq/reporter/query_strings.php.default Wed Mar 1 20:56:46 2006
+++ wp-stattraq/reporter/query_strings.php Thu Mar 2 03:13:35 2006
@@ -84,8 +84,9 @@
if($results)
{
foreach($results as $row) {
+ $row->search_phrase = mb_convert_encoding($row->search_phrase,get_settings('blog_charset'),"AUTO");
echo '<tr><td style="font-size: smaller;"><a href="http://search.yahoo.com/search?p=' . urlencode($row->search_phrase) . '" title="Search Yahoo!">Y</a>|<a href="http://search.msn.com/results.aspx?q=' . urlencode($row->search_phrase) . '" title="Search MSN">M</a>' .
- '<td><a href="http://www.google.com/search?q=' . urlencode($row->search_phrase) . '" title="Search Google">' . htmlentities($row->search_phrase) .'</a></td><td class="right">'.$row->cnt.'</td>';
+ '<td><a href="http://www.google.com/search?q=' . urlencode($row->search_phrase) . '" title="Search Google">' . htmlspecialchars($row->search_phrase) .'</a></td><td class="right">'.$row->cnt.'</td>';
}
}
else
--- wp-stattraq/reporter/summary.php.default Wed Mar 1 20:56:47 2006
+++ wp-stattraq/reporter/summary.php Thu Mar 2 03:12:54 2006
@@ -137,7 +137,7 @@
$blogAddress = get_settings('home') . '/' . get_settings('blogfilename') . '?p=';
foreach($results as $row)
{
- ?><tr class="<?php echo ($i % 2 == 0 ? 'even' : 'odd' );?>"><td><?php echo ++$i;?></td><td><a href="<?php echo $blogAddress , $row->article_id;?>"> <?php echo htmlentities(stripslashes($row->post_title));?></a></td><td class="right"><?php echo number_format($row->cnt);?></td></tr>
+ ?><tr class="<?php echo ($i % 2 == 0 ? 'even' : 'odd' );?>"><td><?php echo ++$i;?></td><td><a href="<?php echo $blogAddress , $row->article_id;?>"> <?php echo htmlspecialchars(stripslashes($row->post_title));?></a></td><td class="right"><?php echo number_format($row->cnt);?></td></tr>
<?php
}
}
@@ -206,7 +206,7 @@
foreach($results as $row){
$short_url = substr($row->ref,0, 50);
?>
- <tr class="<?php echo ($i % 2 == 0 ? 'even' : 'odd' );?>"><td><?php echo ++$i;?></td><td><a href="<?php echo htmlentities($row->ref);?>" title="<?php echo htmlentities($row->ref);?>"><?php echo $short_url;?> </a></td><td class="right"><?php echo number_format($row->cnt);?></td></tr>
+ <tr class="<?php echo ($i % 2 == 0 ? 'even' : 'odd' );?>"><td><?php echo ++$i;?></td><td><a href="<?php echo htmlspecialchars($row->ref);?>" title="<?php echo htmlspecialchars($row->ref);?>"><?php echo $short_url;?> </a></td><td class="right"><?php echo number_format($row->cnt);?></td></tr>
<?php
}
}
@@ -248,6 +248,7 @@
if($results){
$search_phrase = "";
foreach($results as $row){
+ $row->search_phrase = mb_convert_encoding($row->search_phrase,get_settings('blog_charset'),"AUTO");
$search_phrase = urlencode($row->search_phrase);
?>
<tr class="<?php echo ($i % 2 == 0 ? 'even' : 'odd' );?>"><td><?php echo ++$i;?></td><td style="font-size: smaller;"><a href="http://search.yahoo.com/search?p=<?php echo $search_phrase;?>" title="Search Yahoo!">Y</a>|<a href="http://search.msn.com/results.aspx?q=<?php echo $search_phrase ;?>" title="Search MSN">M</a></td><td><a href="http://www.google.com/search?q=<?php echo $search_phrase;?>" title="Search Google"><?php echo $row->search_phrase;?> </a></td><td class="right"><?php echo number_format($row->cnt);?></td></tr>
参考にさせていただいたサイトと違うのは、
- mb_convert_encoding()での出力文字セットを、UTF-8決めうちではなくget_settings(‘blog_charset’)で決定している
- wp-stattraq/reporter/referrer.phpでもhtmlentities()を使っているが、こちらは化けないので直してない
ことです。