*&が&に変換されないまま出力される場合がある [#v729b7bf] -ページ: BugTrack -投稿者: [[reimy]] -優先順位: 緊急 -状態: 完了 -カテゴリー: 本体バグ -投稿日: 2003-06-12 (木) 08:33:50 -バージョン: **メッセージ [#nc949576] &→&への変換が正しく行なわれない場合がある。 -&に半角英数文字が続き;で終わる文字列がインラインプラグインやユーザー定義に合致しない場合、&が&に変換されないまま出力される。 &hoge; &hoge; ~変換されないのは &半角英数文字; の場合だけで、&半角英数文字 だけで ;が付かない場合は正しく出力される。 &hoge &hoge ---- -実体参照が定義されているかどうかを調べる手段が…[[PHP:get_html_translation_table]](HTML_ENTITIES)には†などは含まれていないみたいですし。うーん。 -- [[ぱんだ]] &new{2003-06-12 (木) 09:41:39}; -ユーザ定義ルールを以下のように修正すれば、とりあえず「実体名による」実体参照を「全て」抑止できますが、それはお望みの動作ではないと思われ… -- [[ぱんだ]] &new{2003-06-12 (木) 09:41:39}; -'&(#[0-9]+|#x[0-9a-f]+|[0-9a-zA-Z]+);' => '&$1;', +'&(#[0-9]+|#x[0-9a-f]+);' => '&$1;', -[[W3C・Character entity references in HTML 4:http://www.w3.org/TR/html4/sgml/entities.html]] -- [[reimy]] &new{2003-06-12 (木) 13:55:18}; -get_autolink_pattern_sub()を使って、正規表現パターンを作ってみました。まだ最適化の余地はありそう(?)ですが、ちょっと泣けてきますね。(80桁で改行しています) -- [[ぱんだ]] &new{2003-06-12 (木) 15:39:08}; (?:A(?:Elig|acute|circ|grave|lpha|ring|tilde|uml)|Beta|C(?:cedil|hi)|D(?:agger|e lta)|E(?:TH|acute|circ|grave|psilon|ta|uml)|Gamma|I(?:acute|circ|grave|ota|uml)| Kappa|Lambda|Mu|N(?:tilde|u)|O(?:Elig|acute|circ|grave|m(?:ega|icron)|slash|tild e|uml)|P(?:hi|i|rime|si)|Rho|S(?:caron|igma)|T(?:HORN|au|heta)|U(?:acute|circ|gr ave|psilon|uml)|Xi|Y(?:acute|uml)|Zeta|a(?:acute|c(?:irc|ute)|elig|grave|l(?:efs ym|pha)|mp|n(?:d|g)|pos|ring|symp|tilde|uml)|b(?:dquo|eta|rvbar|ull)|c(?:ap|cedi l|e(?:dil|nt)|hi|irc|lubs|o(?:ng|py)|rarr|u(?:p|rren))|d(?:Arr|a(?:gger|rr)|e(?: g|lta)|i(?:ams|vide))|e(?:acute|circ|grave|m(?:pty|sp)|nsp|psilon|quiv|t(?:a|h)| u(?:ml|ro)|xist)|f(?:nof|orall|ra(?:c(?:1(?:2|4)|34)|sl))|g(?:amma|e|t)|h(?:Arr| arr|e(?:arts|llip))|i(?:acute|circ|excl|grave|mage|n(?:fin|t)|ota|quest|sin|uml) |kappa|l(?:Arr|a(?:mbda|ng|quo|rr)|ceil|dquo|e|floor|o(?:wast|z)|rm|s(?:aquo|quo )|t)|m(?:acr|dash|i(?:cro|ddot|nus)|u)|n(?:abla|bsp|dash|e|i|ot(?:in)?|sub|tilde |u)|o(?:acute|circ|elig|grave|line|m(?:ega|icron)|plus|r(?:d(?:f|m))?|slash|ti(? :lde|mes)|uml)|p(?:ar(?:a|t)|er(?:mil|p)|hi|i(?:v)?|lusmn|ound|r(?:ime|o(?:d|p)) |si)|quot|r(?:Arr|a(?:dic|ng|quo|rr)|ceil|dquo|e(?:al|g)|floor|ho|lm|s(?:aquo|qu o))|s(?:bquo|caron|dot|ect|hy|i(?:gma(?:f)?|m)|pades|u(?:b(?:e)?|m|p(?:1|2|3|e)? )|zlig)|t(?:au|h(?:e(?:re4|ta(?:sym)?)|insp|orn)|i(?:lde|mes)|rade)|u(?:Arr|a(?: cute|rr)|circ|grave|ml|psi(?:h|lon)|uml)|weierp|xi|y(?:acute|en|uml)|z(?:eta|w(? :j|nj))) -[[PHP:get_html_translation_table]]で対象となっているものだけでいいかも。それ以外はユーザー定義で個別対応とか。 -- [[reimy]] &new{2003-06-12 (木) 17:52:58}; --それだと半分くらいになります。どっちにしても、このパターンをCACHE_DIRあたりに置くようにして生成の手間を省かないと… -- [[ぱんだ]] &new{2003-06-12 (木) 23:24:23}; (?:A(?:Elig|acute|circ|grave|ring|tilde|uml)|Ccedil|E(?:TH|acute|circ|grave|uml) |I(?:acute|circ|grave|uml)|Ntilde|O(?:acute|circ|grave|slash|tilde|uml)|THORN|U( ?:acute|circ|grave|uml)|Yacute|a(?:acute|c(?:irc|ute)|elig|grave|mp|ring|tilde|u ml)|brvbar|c(?:cedil|e(?:dil|nt)|opy|urren)|d(?:eg|ivide)|e(?:acute|circ|grave|t h|uml)|frac(?:1(?:2|4)|34)|gt|i(?:acute|circ|excl|grave|quest|uml)|l(?:aquo|t)|m (?:acr|i(?:cro|ddot))|n(?:bsp|ot|tilde)|o(?:acute|circ|grave|rd(?:f|m)|slash|til de|uml)|p(?:ara|lusmn|ound)|quot|r(?:aquo|eg)|s(?:ect|hy|up(?:1|2|3)|zlig)|t(?:h orn|imes)|u(?:acute|circ|grave|ml|uml)|y(?:acute|en|uml)) -cvsに投入しました。 -- [[ぱんだ]] &new{2003-06-13 (金) 10:32:42}; --[[cvs:cache/entities.dat]](v1.4:r1.1) &color(red){''新規''}; --[[cvs:default.ini.php]](v1.4:r1.3) --[[cvs:init.php]](v1.4:%%r1.49%%r1.50) --[[cvs:jphone.ini.php]](v1.4:r1.5) --[[cvs:pukiwiki.ini.php]](v1.4:r1.39) --[[cvs:i_mode.ini.php]](v1.4:r1.4) -うまくいってるようです。 -- [[reimy]] &new{2003-06-13 (金) 11:48:11}; --と思ったら、ユーザー定義で次のような定義があるとうまくいかないようです。 -- [[reimy]] &new{2003-06-13 (金) 11:57:33}; "&" => "&", //全角&を半角表示に ~この場合、©と入力したものも©になってしまいます。ユーザー定義のあとでチェックが入るんですねぇ。うーん…困ったなあ。 -置換パターンの順序を調整しました。[[cvs:init.php]](v1.4:r1.51)を試してみてください。 -- [[ぱんだ]] &new{2003-06-13 (金) 12:39:10}; --うまくいきましたm(__)m -- [[reimy]] &new{2003-06-13 (金) 14:54:33}; #comment