• autolinkが日本語で動作しません#

  • RyoJPN Reply #1, 2 years, 9 months ago

    Reply
    こんにちわ。
    autolink ver2を導入しました。Modx は0.9.6.3です。
    キーワードが英語(たとえば「MODx」や「test」)では動作しますが、日本語(たとえば「テスト」)では動作しません。
    対処法は無いでしょうか?


  • yama Reply #2, 2 years, 9 months ago

    Reply
    モジュールのコードを見てみると
    <meta http-equiv="Content-Type" />
    このようにハードコードでcharset=iso-8859-1がセットされてます。これが原因とは限らないかもですが、とりあえずutf-8にしてから試してみるとよいかも。


  • RyoJPN Reply #3, 2 years, 9 months ago

    Reply
    試してみました。変化ないです・・・。
    2byte文字だと問題なく動いているのですが・・・。

    ほかにチェックするべきところはあるでしょうか?


  • sama55 Reply #4, 2 years, 9 months ago

    Reply
    使ったことがないのでよく分からないのですが、abbrやacronymで囲む発想からして、「そもそも日本語で動かすようなことを想定してない(動かなくて正解)」ということはないでしょうか?


  • RyoJPN Reply #5, 2 years, 9 months ago

    Reply
    そうですか・・・残念。
    特定のキーワードをハイライト表示させたいのですが、他に方法は無いでしょうか?


  • yama Reply #6, 2 years, 9 months ago

    Reply
    autolinkだとオーバースペックだし目的自体が微妙に違う感じですね。使えなくはないみたいですが・・

    $modx->documentObject['content'] = str_replace('MODx', '<strong>モドエックス</strong>', $modx->documentObject['content']);

    適当な名前でプラグインを作ってシステムイベント「OnLoadWebDocument」にチェックを入れて、上記のコードを書いて保存すると最低限の置換(ハイライトなど)はできるようになります。複数の単語を対象にする時は配列を使う・・とか、あとはphpの話になってきますが・・


  • sama55 Reply #7, 2 years, 9 months ago

    Reply
    プラグインを作るのなら、Search Highlightingを使っちゃう、というのはどうでしょう?特定な用語(複数)をハイライトできればよいのですよね?言い方を変えると、Search Highlightingの親であるAjaxSearchを真似て、呼出専用の簡単なプラグインを作る、ということ。すべての処理を自前で作るより簡単な気がします。用語リストの持ち方はテンプレート変数ですかね。


  • yama Reply #8, 2 years, 9 months ago

    Reply
    そのほうがよいかもですね。単純置換だとタグの中身まで対象にしてしまうし。(Search Highlightingは大丈夫だったはず)


  • RyoJPN Reply #9, 2 years, 9 months ago

    Reply
    お返事遅くなりました。

    Search Highlightingでのやり方がわからず(phpはまったく使ったことがないもので・・・)、とりあえずyamaさんのプラグイン作戦で解決しました。
    置換したいのが日本語のキーワードなので、とりあえず大丈夫かな・・・と。

    助かりました!いつもありがとうございます。

    ↓↓↓作ったのはこんな感じ↓↓↓
    //強調表示するテキストを入力
    $list = array("キーワード1", "キーワード2", "キーワード3");
    //リストの数を数える
    $ct = count($list);

    //スタイルの定義
    $style1 = '<strong>';
    $style2 = '</strong>';

    //リストの数だけ、置換を行う
    for ($a=0; $a<$ct; $a++){
    //リストの文字とスタイルの連結
    $strong = $style1.$list[$a].$style2;
    //置換実行
    $modx->documentObject['content'] = str_replace($list[$a], $strong, $modx->documentObject['content']);
    }