BugTrack/2282
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
* InterWikiName の地味な拡張案とおまけ [#p483337c]
- ページ: [[BugTrack2]]
- 投稿者: 名無しさん
- 優先順位: 低
- 状態: 提案
- カテゴリー: 本体新機能
- 投稿日: 2007-10-18 (木) 22:15:58
- バージョン:
** メッセージ [#rf035a2e]
処理方法は同じだが出力時に利用するエンコードだけを変えた...
#contents
***これまでの経緯 [#y5534c65]
[[雑談]] より
- 置き換えている間に、いろんなページを見たので、ついでに...
-- 挿入位置指定は今でもあるから良いとして、%% str_replace...
-- もし、CVS 内のファイルをすべてUTF-8 にするという時がき...
- 我々にとっては便利ですね :) こうした加工の技は一種類で...
-- ・・・そういえばYukiWikiのInterWikiでは、euc() といっ...
[[PukiWiki http://pukiwiki.sourceforge.jp/?euc($1)]]
***改造後のイメージ [#m061a0ec]
下の改造案を適用して、InterWikiName のページに次のように...
[http://test.com/$1.htm test-euc] encode:euc
[http://test.com/$1.htm test-utf8] encode:utf8
-[[test-euc:雑談]] と書くと
--&color(#FB7E21){http://test.com/BBA8C3CC.htm}; になる
-[[test-utf8:雑談]] と書くと
--&color(#FB7E21){http://test.com/E99B91E8AB87.htm}; ...
PukiWiki で書いたものをHTML に変換して使っているサイトな...
***改造案 [#da09fdc7]
[[cvs:lib/make_link.php]] (1.37) をベースに
// Render an InterWiki into a URL
function get_interwiki_url($name, $param)
{
(中略)
default:
- // Alias conversion of $opt
- if (isset($encode_aliases[$opt])) $opt = & $encode_al...
-
- // Encoding conversion into specified encode, and URL...
- $param = rawurlencode(mb_convert_encoding($param, $op...
+ if (strpos($opt, ':') === FALSE) {
+ // Alias conversion of $opt
+ if (isset($encode_aliases[$opt])) $opt = & $encode_a...
+
+ // Encoding conversion into specified encode, and UR...
+ $param = rawurlencode(mb_convert_encoding($param, $o...
+ } else {
+ $type = explode(':', $opt, 2);
+
+ switch($type[0]) {
+
+ case 'encode':
+ // Alias conversion of $opt
+ if (isset($encode_aliases[$type[1]])) $type[1] = & ...
+
+ $param = encode(mb_convert_encoding($param, $type[1...
+ break;
+
+ default:
+ $param = '';
+ }
+ }
}
***改造後について、補足など [#y1908d4a]
コードを見れば、わかる事が大半ですが…。
-その他(default:) の中に追加したので、これまでに書き足し...
-その他で、コロン(:) が無い場合はこれまでの処理
-新しいタイプ名が「encode:エンコードタイプ」になっている...
-これまでなら、処理は同じだが出力に使うエンコードは…とい...
--追加したswitch の中に新しいタイプを追加すれば、「タイプ...
--そこまで必要ない場合は、これまでどおりの場所に追加すれ...
--------
**コメント [#k1902e8c]
#comment
*おまけ (InterWikiName 関連の疑問など) [#d6c0457f]
**get_interwiki_url 関数の正規表現について(ついでで、Lin...
get_interwiki_url() の中では
foreach (get_source($interwiki) as $line)
if (preg_match('/\[(' . '(?:(?:https?|ftp|news):\/\/|\.\...
'[!~*\'();\/?:\@&=+\$,%#\w.-]*)\s([^\]]+)\]\s?([^\s]...
$line, $matches))
$interwikinames[$matches[2]] = array($matches[1], $matc...
となっていて、キャプチャ2番目のエイリアスの部分は、] ...
しかし、bracket の中にInterWikiName を書いた場合の処理(L...
-InterWikiName の中には、空白文字やコロンも含まれてはいけ...
-エイリアスとの区切りを示す> や>[[はInter...
と書いているように見える
function get_pattern()
{
$s2 = $this->start + 2;
$s5 = $this->start + 5;
return <<<EOD
\[\[ # open bracket
(?:
((?:(?!\]\]).)+)> # (1) alias
)?
(\[\[)? # (2) open bracket
((?:(?!\s|:|\]\]).)+) # (3) InterWiki
(?<! > | >\[\[ ) # not '>' or '>[['
: # separator
( # (4) param
(\[\[)? # (5) open bracket
(?:(?!>|\]\]).)+
(?($s5)\]\]) # close bracket if (5)
)
(?($s2)\]\]) # close bracket if (2)
\]\] # close bracket
EOD;
}
Link_url_interwiki クラスはInterWikiName のページに書き込...
あと、コメントアウトした行を除外せずに、リストを収得して...
つまり、[[official:InterWikiName]] に書いてあるコメントア...
***関連 [#r8203c2b]
- [[official:続・質問箱/326]]
--------
***コメント [#xdf7659c]
#comment
**mb_convert_encoding 関数に無効なエンコードタイプが使わ...
現状でも、エンコードタイプの入力をミスするとPHPがエラーを...
エラーを表示させなくするだけなら
- $param = rawurlencode(mb_convert_encoding($param, $opt...
+ $param = rawurlencode(@mb_convert_encoding($param, $op...
で十分だが、なぜか空文字が返されている。
自分のところではなぜかうまく動作したフォロー方法
$str = @mb_convert_encoding($param, $opt, SOURCE_ENCODIN...
if ($str !== FALSE) {
$param = rawurlencode($str);
} else {
$param = rawurlencode($param);
}
しかし、[[rawurlencode() の説明>PHP関数:rawurlencode]]に...
エラーを表示しない、で十分だと思いますので、後半部分は気...
--------
***コメント [#ab9e5534]
#comment
終了行:
* InterWikiName の地味な拡張案とおまけ [#p483337c]
- ページ: [[BugTrack2]]
- 投稿者: 名無しさん
- 優先順位: 低
- 状態: 提案
- カテゴリー: 本体新機能
- 投稿日: 2007-10-18 (木) 22:15:58
- バージョン:
** メッセージ [#rf035a2e]
処理方法は同じだが出力時に利用するエンコードだけを変えた...
#contents
***これまでの経緯 [#y5534c65]
[[雑談]] より
- 置き換えている間に、いろんなページを見たので、ついでに...
-- 挿入位置指定は今でもあるから良いとして、%% str_replace...
-- もし、CVS 内のファイルをすべてUTF-8 にするという時がき...
- 我々にとっては便利ですね :) こうした加工の技は一種類で...
-- ・・・そういえばYukiWikiのInterWikiでは、euc() といっ...
[[PukiWiki http://pukiwiki.sourceforge.jp/?euc($1)]]
***改造後のイメージ [#m061a0ec]
下の改造案を適用して、InterWikiName のページに次のように...
[http://test.com/$1.htm test-euc] encode:euc
[http://test.com/$1.htm test-utf8] encode:utf8
-[[test-euc:雑談]] と書くと
--&color(#FB7E21){http://test.com/BBA8C3CC.htm}; になる
-[[test-utf8:雑談]] と書くと
--&color(#FB7E21){http://test.com/E99B91E8AB87.htm}; ...
PukiWiki で書いたものをHTML に変換して使っているサイトな...
***改造案 [#da09fdc7]
[[cvs:lib/make_link.php]] (1.37) をベースに
// Render an InterWiki into a URL
function get_interwiki_url($name, $param)
{
(中略)
default:
- // Alias conversion of $opt
- if (isset($encode_aliases[$opt])) $opt = & $encode_al...
-
- // Encoding conversion into specified encode, and URL...
- $param = rawurlencode(mb_convert_encoding($param, $op...
+ if (strpos($opt, ':') === FALSE) {
+ // Alias conversion of $opt
+ if (isset($encode_aliases[$opt])) $opt = & $encode_a...
+
+ // Encoding conversion into specified encode, and UR...
+ $param = rawurlencode(mb_convert_encoding($param, $o...
+ } else {
+ $type = explode(':', $opt, 2);
+
+ switch($type[0]) {
+
+ case 'encode':
+ // Alias conversion of $opt
+ if (isset($encode_aliases[$type[1]])) $type[1] = & ...
+
+ $param = encode(mb_convert_encoding($param, $type[1...
+ break;
+
+ default:
+ $param = '';
+ }
+ }
}
***改造後について、補足など [#y1908d4a]
コードを見れば、わかる事が大半ですが…。
-その他(default:) の中に追加したので、これまでに書き足し...
-その他で、コロン(:) が無い場合はこれまでの処理
-新しいタイプ名が「encode:エンコードタイプ」になっている...
-これまでなら、処理は同じだが出力に使うエンコードは…とい...
--追加したswitch の中に新しいタイプを追加すれば、「タイプ...
--そこまで必要ない場合は、これまでどおりの場所に追加すれ...
--------
**コメント [#k1902e8c]
#comment
*おまけ (InterWikiName 関連の疑問など) [#d6c0457f]
**get_interwiki_url 関数の正規表現について(ついでで、Lin...
get_interwiki_url() の中では
foreach (get_source($interwiki) as $line)
if (preg_match('/\[(' . '(?:(?:https?|ftp|news):\/\/|\.\...
'[!~*\'();\/?:\@&=+\$,%#\w.-]*)\s([^\]]+)\]\s?([^\s]...
$line, $matches))
$interwikinames[$matches[2]] = array($matches[1], $matc...
となっていて、キャプチャ2番目のエイリアスの部分は、] ...
しかし、bracket の中にInterWikiName を書いた場合の処理(L...
-InterWikiName の中には、空白文字やコロンも含まれてはいけ...
-エイリアスとの区切りを示す> や>[[はInter...
と書いているように見える
function get_pattern()
{
$s2 = $this->start + 2;
$s5 = $this->start + 5;
return <<<EOD
\[\[ # open bracket
(?:
((?:(?!\]\]).)+)> # (1) alias
)?
(\[\[)? # (2) open bracket
((?:(?!\s|:|\]\]).)+) # (3) InterWiki
(?<! > | >\[\[ ) # not '>' or '>[['
: # separator
( # (4) param
(\[\[)? # (5) open bracket
(?:(?!>|\]\]).)+
(?($s5)\]\]) # close bracket if (5)
)
(?($s2)\]\]) # close bracket if (2)
\]\] # close bracket
EOD;
}
Link_url_interwiki クラスはInterWikiName のページに書き込...
あと、コメントアウトした行を除外せずに、リストを収得して...
つまり、[[official:InterWikiName]] に書いてあるコメントア...
***関連 [#r8203c2b]
- [[official:続・質問箱/326]]
--------
***コメント [#xdf7659c]
#comment
**mb_convert_encoding 関数に無効なエンコードタイプが使わ...
現状でも、エンコードタイプの入力をミスするとPHPがエラーを...
エラーを表示させなくするだけなら
- $param = rawurlencode(mb_convert_encoding($param, $opt...
+ $param = rawurlencode(@mb_convert_encoding($param, $op...
で十分だが、なぜか空文字が返されている。
自分のところではなぜかうまく動作したフォロー方法
$str = @mb_convert_encoding($param, $opt, SOURCE_ENCODIN...
if ($str !== FALSE) {
$param = rawurlencode($str);
} else {
$param = rawurlencode($param);
}
しかし、[[rawurlencode() の説明>PHP関数:rawurlencode]]に...
エラーを表示しない、で十分だと思いますので、後半部分は気...
--------
***コメント [#ab9e5534]
#comment
ページ名: