Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2018-02-28 14:09:43

nshown
メンバー
登録日: 2008-01-05
投稿: 105

TagEXで使えない文字列がある

GitHubからダウンロードできるNP_TagEXを使用しています。

現在、タグとして都道府県名を使用しております。
このうち、「兵庫県」と「鹿児島県」を設定すると、タグリンクを表示しますが、クリックしても404エラーとなってしまいます。
おそらく「兵」「児」の文字がネックなのだろうと思います。

これら以外の都道府県名では問題なくタグリンクが動作し、意図通りのページが表示されます。
以前、サーバー機がEUCだった時も似たような現象があり、そのときはタグとして使用したいのキーワードの前後に [ ]記号を付けてしのいでいたのですが、UTF-8では逆に[ ]記号は使えないため、どうしたものかと悩んでおります。
どなたか、解決方法ご存知の方がおられましたら、お教え下さい。
よろしくお願いします。

詳細なソフトのバージョンは下記の通りです。
Apache 2.4.12
PHP 5.6.8
MySQL 5.6.24
Nucleus 3.71
NP_TagEX 0.73

オフライン

#2 2018-02-28 19:49:57

ピヨピヨbird
メンバー
登録日: 2015-04-05
投稿: 101

Re: TagEXで使えない文字列がある

新規インストールした環境では再現しませんでした。
・「兵庫県」と「鹿児島県」を設定後にクリックしても表示される
・存在しないタグでアクセスしても404エラーは発生しない。

NP_TagEXのauthorに掲載されている作った人はここ数年フォーラムでみかけないのでちょっと厳しいですね。

原因の場所をご自分で調査するしか方法がないと思います。

php.iniにEUCの変な設定が残っているとか
ほかのプラグインが問題を起こしているとか

環境 v3.8dev-ja, v3.7(NucleusCMS-ja/master)
     + apache(windows) + php7.1, 5.6
●テストケース1
http://japan.nucleuscms.org/wiki/plugins:tagex
によると NP_ShowBlogsがいるとのことなので
(1) NP_ShowBlogs,NP_TagEXをインストール

(2) スキンの編集 'default': メインの目次ページ にて変更

<%blog(default/index,10)%>

<%if(hasplugin,ShowBlogs)%>
<%if(hasplugin,TagEX)%><%TagEX(list10)%><%endif%>
<%ShowBlogs(default/index,10)%>
<%else%>
<%blog(default/index,10)%>
<%endif%>

(3)アイテム追加
(3-1). タイトル/本文/tag : 兵庫県
(3-2). タイトル/本文/tag : 鹿児島県
(3-3). タイトル/本文/tag : 佐賀県

(4) サイトトップページを表示
兵庫県 鹿児島県 佐賀県が表示されているので、順番に[CTRL+クリック]。
すべて正常に絞り込まれて表示される

●テストケース2
(1) NP_CustomURLをインストール
(2) グルーバル設定 Fancyに変更
(3) .htaccessの内容を plugins/NP_CustomURL/sample.htaccess からコピー
(4) サイトトップページを表示し、通常ページが表示できるか確認する
(5) サイトトップページに戻り、
兵庫県 鹿児島県 佐賀県が表示されているので、順番に[CTRL+クリック]。
すべて正常に絞り込まれて表示される

●テストケース3
(1) 存在しないタグにアクセス
/tag/鹿児島県/ を /tag/鹿/ にしてアクセスしてみる
?blogid=1&tag=鹿児島県 を ?blogid=1&tag=鹿 にしてアクセスしてみる
一覧が表示されないだけで 404エラーにはならない。(HTTP/1.1 200 OK)


◆気が付いたこと
・存在しないタグの場合に200okを返すのは検索エンジン的にはよくない
・NP_TagEX::quote_smart関数に配列を渡す場合のコードが間違っている(条件式および値)。
  条件式:array_mapは、個々の要素に適用した配列を返すものであって、個々の要素の結果をor演算した結果を返すものではない。
  値: ' の欠落
  array_mapをforeachに置き換えたほうがいい。
・データを全部fetchしている(ソート処理でSQLで処理できることを無駄に大量fetchしてphp側で処理している)
・0で始まる数字は、0が削除される
・文字「0」は登録できるが一覧には表示されない

編集者 ピヨピヨbird (2018-03-02 20:21:57)

オフライン

#3 2018-02-28 20:50:28

ピヨピヨbird
メンバー
登録日: 2015-04-05
投稿: 101

Re: TagEXで使えない文字列がある

php -r "echo implode(' ',str_split(bin2hex('兵庫県'),2));"
php -r "echo implode(' ',str_split(bin2hex(iconv('utf-8','eucjp','兵庫県')),2));"

UTF8: e5 85 b5 e5 ba ab e7 9c 8c
EUC:  ca bc b8 cb b8 a9

問題を起こしそうなこれらの文字は含まれていない

php -r "echo implode(' ',str_split(bin2hex('\/,'''),2));"
5c 2f 2c

UTF8コンソールで

php -r "echo iconv('utf-8','eucjp','兵庫県');"
php -r "echo iconv('utf-8','eucjp','鹿児島県');"

とすると文字が表示される。

表示された文字をコピペしてコード番号を表示する

php -r "echo bin2hex('ʼ');"
cabc

兵(EUC:cabc)は、UTF8で アポストロフィー ʼ ですが、mysqlデータベースでは関係ないようです。
sql_quote_string('ʼ')も同じ文字で戻ってきますし、
mysqlで

SELECT 'ʼ'

は通るので問題ないようです。


作業環境に再構築して、デバッグでブレークポイントを適当において、ステップ実行するしかないと思います。

編集者 ピヨピヨbird (2018-02-28 21:02:41)

オフライン

#4 2018-02-28 23:20:36

nshown
メンバー
登録日: 2008-01-05
投稿: 105

Re: TagEXで使えない文字列がある

早速ありがとうございます。

当方でもGitHubのこちらからダウンロードしたNucleus CMSを新規インストールし、NP_CustomURLとNP_TagEXだけインストールしてみました。

結論から申しますと、エラーは起こりませんでした。

エラーを起こした方のnucleus/libsと新規にインストールした方を比べると、ファイルの中身までは確認していませんが、個々のファイルサイズからして全然違っていて、同じVer.3.71と表示されても相当違うなと感じた次第です。
当方で、入力画面関係で使い勝手を良くするためにローカライズした部分が相当ありましたので、その辺りが問題の原因だったのかなと思います。

エラーは出なくなったのですが、そもそもの都道府県名のタグが漢字の場合、タグリストが50音順に並ばないということが判明したため、TagEXの機能そのままで用いるのは難があるということに。

それはともかく、お手数をお掛け致しまして申し訳ございませんでした。

オフライン

Board footer