一覧での大文字小文字の区別を無くそう

  • ページ: BugTrack2
  • 投稿者: MetalGlue
  • 優先順位: 普通
  • 状態: 完了
  • カテゴリー: その他
  • 投稿日: 2005-09-17 (土) 01:30:41
  • バージョン: 1.4.5_1
  • リリース予定バージョン: 1.5.2

メッセージ

普通こういうの大文字小文字を区別しない方がいいと思うんですけど.

--- wiki.orig/lib/func.php	2005-02-20 21:50:06.000000000 +0900
+++ wiki/lib/func.php	2005-09-17 00:57:14.000000000 +0900
@@ -313,7 +313,7 @@
 				$head = $other;
 			}
 		} else {
-			$head = (preg_match('/^([A-Za-z])/', $page, $matches)) ? $matches[1] :
+			$head = (preg_match('/^([A-Za-z])/', $page, $matches)) ? strtoupper($matches[1]) :
 				(preg_match('/^([ -~])/', $page, $matches) ? $symbol : $other);
 		}

  • いや、普通preg_match()で大文字小文字区別しない場合はiオプションを使うでしょ。 -- 2005-09-17 (土) 09:54:14
  • プログラムのやり方の問題じゃなくて,A と a を区別して項目分けするっていう仕様は変じゃない?って言ってるんだけど.一般常識の問題.それにpreg_matchでiオプションを使ったときに$matches[1]に大文字が入っているっていうことはそんなに自明ではない.プログラム的にはこちらのほうが適切と思う. -- MetalGlue 2005-09-20 (火) 10:50:30
  • ていうか,iオプション使ったってうまくいかないじゃないか! -- MetalGlue 2005-09-20 (火) 10:53:06
  • 自分の場合、一覧で、Aa、AB、Acを並べる時にAB→Aa→Acという順になるのは困りますね。Aa→AB→Acという順に出来れば助かりますが。 -- toa? 2005-09-20 (火) 16:10:46
    • ここの処理は [[ページの一覧>http://pukiwiki.sourceforge.jp/pukiwiki1.4/index.php?cmd=list]]*1 の頭文字取得なので2文字目以降のソートには影響しないです。PageReadingも考慮すると数行上も書き換えが要ります。ついでに3番目のところも書き換えるとPage1~10がPage1,Page10,Page2~と並んでしまうのを変えられたりします*2。 -- Cue 2005-09-20 (火) 19:31:48
@@ -328,7 +328,7 @@
         // WARNING: Japanese code hard-wired
         if($pagereading_enable) {
             if(mb_ereg('^([A-Za-z])', mb_convert_kana($page, 'a'), $matches)) {
-                $head = $matches[1];
+                $head = strtoupper($matches[1]);
             } elseif (isset($readings[$page]) && mb_ereg('^([ァ-ヶ])', $readings[$page], $matches)) { // here
                 $head = $matches[1];
             } elseif (mb_ereg('^[ -~]|[^ぁ-ん亜-熙]', $page)) { // and here
@@ -337,7 +337,7 @@
                 $head = $other;
             }
         } else {
-            $head = (preg_match('/^([A-Za-z])/', $page, $matches)) ? $matches[1] :
+            $head = (preg_match('/^([A-Za-z])/', $page, $matches)) ? strtoupper($matches[1]) :
                 (preg_match('/^([ -~])/', $page, $matches) ? $symbol : $other);
         }
 
@@ -364,7 +364,7 @@
                 '"><strong>' . $head . '</strong></a>' . "\n" .
                 '  <ul>' . "\n";
         }
-        ksort($pages);
+        uksort($pages, 'strnatcmp');
         $retval .= join("\n", $pages);
         if ($list_index)
             $retval .= "\n  </ul>\n </li>\n";
  • ありがとうございます.uksort のところは 'strnatcasecmp' の方がよさげですが,いまひとつ期待と違う動きをします.例えば makefile → MAKEFILE → Makefile となります(というか不定なのか...).大文字小文字を考慮しつつ大文字小文字を区別しない strnatnocasecmp ? とかを作るしかないかも. -- MetalGlue 2005-09-20 (火) 20:14:41
    • 'strnatcasecmp'だと大文字小文字を区別しないのでmakefile, MAKEFILE, Makefileは同一とみなされてソートされないです。結果としてディレクトリエントリを読み込んだ順そのままに表示されてしまうと思います(前処理まで読んでないので断定できませんが)。 -- Cue 2005-09-20 (火) 21:24:03
    • あ、phpのソートが非破壊ソートかどうかは知りません。ごめんなさい。 -- Cue 2005-09-20 (火) 21:38:17
      • usortの方に注意がありました。同一の場合の順番は未定義です。 -- Cue 2005-09-20 (火) 22:05:34
    • ksort($pages) をして大文字 → 小文字の順を確定させてから、uksort($pages, 'strnatcasecmp') を実行すれば実現可。 -- 2007-07-24 (火) 18:48:01
  • こんにちは :) この話題はきっと文化の違いであるに違いない・・・ -- henoheno 2005-09-20 (火) 21:45:28
  • ソートの基準の違いが「文化」の違いであることには同意しますが,A と a で別項目を立てる(しかも項目 A と a が B-Z によって隔てられている)というのはいくら文化が違ってもありえないと個人的には感じます. -- MetalGlue 2005-09-20 (火) 21:55:21
    • 禿同。少なくとも日本人のみならず、アルファベットを使う欧米の人も首をかしげるかと。 -- toa? 2005-09-21 (水) 10:55:32
      • 「あ」と「ぁ」が別なのはわかりますけどね。 -- toa? 2005-09-21 (水) 10:56:35
  • [^ぁ-ん亜-熙]とかのS-JISっぽい指定ってUnicode版で平気なのかなぁ。 「熙」はS-JIS第二水準最後の文字だけどUnicodeではU+7199で、熟がU+719F、爪がU+722A、 牛がU+725B、犬がU+72ACと、全く狙から漏れる文字が膨大なのですが…。 なお、ちょっと整理しておきますと、Unicodeだとかなり並びが違うだけでなく、 漢字のカタマリなどは複数箇所に分散しています。 -- anonymous? 2016-09-26 02:00:00
    仮名安直ひとまとめA案 [ -ヿ]
    
    仮名安直ひとまとめB案 [ぁ-ヿ]
    
    ひらがな(合成用の濁点、半濁点が漏れる) [ぁ-ゖゝ-ゟ]
    
    カタカナ(長音記号が漏れる) [ァ-ヺヽ-ヿ]
    
    
    CJK部首補助  [\u2e80-\u2eff]
    
    康煕部首    [\u2f00-\u2fdf]
    
    漢文用記号   [\u3190-\u319f]
    
    CJK拡張漢字A  [\u3400-\u4dbf]
    
    CJK統合漢字  [\u4e00-\u9fff]
    
    CJK互換漢字  [\uf900-\ufaff]
    
    CJK拡張漢字B  [\u20000-\u2a6df]
    
    CJK拡張漢字C  [\u2a700-\u2b73f]
    
    CJK拡張漢字D  [\u2b740-\u2b81f]
    
    CJK互換漢字補助 [\u2f800-2fa1f]


*1 なんかdevだと無いのでお試しサイトの方
*2 ページ名の一覧処理ってあちこちで別々に書いてるので全部書き換えるのは一苦労ですが

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-11-08 (火) 03:15:27
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.183 sec.

OSDN