日本語対応(SkyBlueCanvas) の変更点
Top / 日本語対応(SkyBlueCanvas)
- 追加された行はこの色です。
- 削除された行はこの色です。
- 日本語対応(SkyBlueCanvas) へ行く。
- 日本語対応(SkyBlueCanvas) の差分を削除
*SkyBlueCanvasの日本語対応 [#cd4ef95a] いざ使ってみて、一部の機能にて日本語(2バイト文字)がまともに通らなかったのでちょっと修正~ ~ 管理画面から各ページを作成・修正する際に、本文に日本語を記載する分には問題なかったが、ページのメタデータに日本語を使用すると、xmlファイル書き出し時に文字化けしてしまい、ページの読み込み自体不可能になってしまう。 ※/data/xml/page.xml への書き出し時に、文字化けする。 このため、以下のファイルを修正~ /includes/xml.parser.php 160行目 // $xml .= $indent.$k.'="'.htmlentities($v).'"'; $xml .= $indent.$k.'="'.htmlspecialchars($v).'"'; どうも、htmlentities()にて文字列をHTMLエンティティに変換する際、変な変換しているっぽい。~ 他のCMS等でも、同じような文字化けが報告されているので、一応2バイト文字圏独特のバグかな?ということで~ ※ちなみに、今回の環境はWebARENA SuiteX上~ ***追記: [#aa0ff1b8] 公式フォーラムにて、他言語(フランス語とかドイツ語)での独特の文字への対応方法が提案されていたが、2バイト文字ではやはり問題がおきるので、上記をバグ報告してあります。~ 作者から、次バージョンへの組み込みコメントもらっているので、たぶん対応するかと~ (09/01/14) ***追記: &color(red){(09/02/02に公式にて対応済み)};[#oc6b738b] Page作成時に、日本語で"Menu Text"を記載すると、ページへのリンクが全て"-.html"となってしまいます。~ これは、SAFE_URLのチェックにて、 -アルファベット -数字 -一部記号 %%Page作成時に、日本語で"Menu Text"を記載すると、ページへのリンクが全て"-.html"となってしまいます。%%~ %%これは、SAFE_URLのチェックにて、%% -%%アルファベット%% -%%数字%% -%%一部記号%% 以外は、一律削除と処理しているためのようです。~ %%以外は、一律削除と処理しているためのようです。%%~ このため、"Menu Text"が日本語のページを複数作ると、Page IDが一番若いページに全てリンクしてしまいます。~ %%このため、"Menu Text"が日本語のページを複数作ると、Page IDが一番若いページに全てリンクしてしまいます。%%~ 回避策として、urlencode()を使って、SAFE_URLのチェックを突破させてみたのですが、うまくリンクしないので、ちょっとお蔵入り中。。。~ URLの書き出しはできているが、クリックした際のURLの解釈に問題があるようです。。。 %%回避策として、urlencode()を使って、SAFE_URLのチェックを突破させてみたのですが、うまくリンクしないので、ちょっとお蔵入り中。。。%%~ %%URLの書き出しはできているが、クリックした際のURLの解釈に問題があるようです。。。%% この機能は、SEO対策としてURLをわかりやすい形に変更し、ApacheのRewriteEngineにてURL置換を行っています。~ もうちょっとソース見てみないといけないようです。~ %%この機能は、SEO対策としてURLをわかりやすい形に変更し、ApacheのRewriteEngineにてURL置換を行っています。%%~ %%もうちょっとソース見てみないといけないようです。%%~ では、どうやって回避するかというと~ これも、ソースいじらないといけません。~ %%では、どうやって回避するかというと%%~ %%これも、ソースいじらないといけません%%。~ ~ SkyBlueCanvasでは、.htaccessファイルの有無で、RewriteEngineを使用(SEO対策モードで稼働)してしまいます。~ これでは、レンタルサーバ等でphp_value等を設定したい、且つ2バイト文字圏での使用に問題が出てしまいます。~ %%SkyBlueCanvasでは、.htaccessファイルの有無で、RewriteEngineを使用(SEO対策モードで稼働)してしまいます。%%~ %%これでは、レンタルサーバ等でphp_value等を設定したい、且つ2バイト文字圏での使用に問題が出てしまいます。%%~ %%このため、以下のファイルを修正%%~ %%/includes/core.php%% %%331行目%% // define('USE_SEF_URLS', file_exists($this->path . '.htaccess') ? 1 : 0 ); define('USE_SEF_URLS', 0 ); .htaccessファイルの有無で、USE_SEF_URLSのフラグを立てるかどうか判断している部分です。~ この修正で、強制的にUSE_SEF_URLSを使用しないようにしています。~ ただし、あくまで緊急的な例外処理のため、本質的には問題のある修正です。~ 一応、このフラグは他のキーに使われていないので、誤作動を起こすことはないと思っています。~ %%.htaccessファイルの有無で、USE_SEF_URLSのフラグを立てるかどうか判断している部分です。%%~ %%この修正で、強制的にUSE_SEF_URLSを使用しないようにしています。%%~ %%ただし、あくまで緊急的な例外処理のため、本質的には問題のある修正です。%%~ %%一応、このフラグは他のキーに使われていないので、誤作動を起こすことはないと思っています。%%~ (09/01/15) ***&color(red){追記:}; [#o7163aa3] 上記対策が、[[公式フォーラム>http://forum.skybluecanvas.com/viewtopic.php?f=19&t=263]]にて対応なされましたので、追記です。~ /include/router.php~ 関数2つを置き換え~ function normalize($str) { $str = strtolower(str_replace( array('ä', 'ö', 'ü', '&szlg', '&', ' & ', '&', ' - ', '/', ' / ', ' '), array('ae', 'oe', 'ue', 'ss', '-and-', '-and-', '-and-', '-', '-', '-', '-'), $str )); $chars = "abcdefghijklmnopqrstuvwxyz0123456789_-%"; $output = ""; $str = strtolower($str); for ($i=0; $i<strlen($str); $i++) { if (false === strpos($chars, $str{$i})) { if ($str{$i} == ' '){ $output = $output.'-'; } else { $output = $output.'%'.dechex(ord($str{$i})); } } else { $output = $output.$str{$i}; } } $str = $output; $max = 50; $n=0; while (strpos($str, '--') !== false && $n<$max) { $str = str_replace('--', '-', $str); $n++; } return $str; } function getPageByNameAndParent($identifier, $parent) { $identifier = $this->removeFileExt($identifier); $bits = explode('.', $identifier); $identifier = $bits[0]; if (count($bits) > 1) { $_GET['params'] = array_slice($bits, 1); } if (empty($identifier)) { return $this->getDefaultPage(); } $selectedPages = array(); foreach ($this->pages as $page) { if (($this->normalize($page->name) == strtolower($identifier) || (strtolower($page->name)==$identifier)) && $page->parent == $parent) { array_push($selectedPages, $page); } } return $selectedPages; } (09/02/13)