../

全角英数文字を半角に変換表示 -- reimy

複数の人間が書き込みをしていると、どうしても英数文字が全角と半角が混在してしまうので、見栄えが悪くなる。

入力時に全角を半角に変換してしまうのがいちばんいいのだけれども、大幅な改造になってしまいそうなので*1、表示時に全角を半角に変換してしまおうというのが、以下の話。

変更箇所

 function make_line_rules($str)
 {
   global $line_rules;

   foreach($line_rules as $rule => $replace)
   {
       $str = preg_replace("/$rule/",$replace,$str);
   }
+  $str = mb_convert_kana($str,"a");
   return $str;
}

ここで変換するのがいちばん安全そうなので。

ただし、これだけだと、"&"、"<"、">"が"&"、"<"、">"に変換されてしまい、まずいのでユーザー定義に下記のものを追加しておく。

"&" => "&amp;",
"<" => "&lt;",
">" => "&gt;",

これで全角で入力された英数字も、“表示”は半角で表示されるようになる。

ユーザー定義部分で変換しているため、WikiName(BracketName)へのリンク、AutoLinkには影響を及ぼさない。

たとえば、赤&黒というBracketNameを文章中に書いた場合、&が&に変換されて「赤&黒」と表示されるが、ちゃんと赤&黒へのリンクは保たれる。

また整形済み行(pre)では半角変換されないのでアスキーアートも安心。


ソースを書き換えて変な文字を変換 -- satoshi

上に挙げられた弊害を無視してでも変な文字を除去したい場合は、以下のようにする。 ただし、環境依存文字はそのままである。

変更箇所

lib/file.php の make_str_rules()に一行追加する。以下は PukiWiki 1.4.6 のもの。

// Modify ogirinal text with user-defined / system-defined rules
function make_str_rules($source)
{
    global $str_rules, $fixed_heading_anchor;

    $lines = explode("\n", $source);
    $count = count($lines);

    $modify    = TRUE;
    $multiline = 0;
    $matches   = array();
    for ($i = 0; $i < $count; $i++) {
        $line = & $lines[$i]; // Modify directly
+       $line = mb_convert_kana($line, 'asKV');

        // Ignore null string and preformatted texts
        if ($line == '' || $line{0} == ' ' || $line{0} == "\t") continue;
        ....

*1 入力時に変換してしまうと、BracketNameやURLなど半角に変換されると困るものの処理が厄介。したがってソース書き換え型ユーザー定義の部分で変換するのは避けた。また、ソースを書き換えるのはあまりしたくないので。

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-08-20 (木) 16:40:45
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.209 sec.

SourceForge