&が&に変換されないまま出力される場合がある

  • ページ: BugTrack
  • 投稿者: reimy
  • 優先順位: 緊急
  • 状態: 完了
  • カテゴリー: 本体バグ
  • 投稿日: 2003-06-12 (木) 08:33:50
  • バージョン:

メッセージ

&→&への変換が正しく行なわれない場合がある。

  • &に半角英数文字が続き;で終わる文字列がインラインプラグインやユーザー定義に合致しない場合、&が&に変換されないまま出力される。
    &hoge;
    &hoge;

    変換されないのは &半角英数文字; の場合だけで、&半角英数文字 だけで ;が付かない場合は正しく出力される。

    &hoge
    &hoge

  • 実体参照が定義されているかどうかを調べる手段が…PHP:get_html_translation_table(HTML_ENTITIES)には†などは含まれていないみたいですし。うーん。 -- ぱんだ 2003-06-12 (木) 09:41:39
  • ユーザ定義ルールを以下のように修正すれば、とりあえず「実体名による」実体参照を「全て」抑止できますが、それはお望みの動作ではないと思われ… -- ぱんだ 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 -- reimy 2003-06-12 (木) 13:55:18
  • get_autolink_pattern_sub()を使って、正規表現パターンを作ってみました。まだ最適化の余地はありそう(?)ですが、ちょっと泣けてきますね。(80桁で改行しています) -- ぱんだ 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 2003-06-12 (木) 17:52:58
    • それだと半分くらいになります。どっちにしても、このパターンをCACHE_DIRあたりに置くようにして生成の手間を省かないと… -- ぱんだ 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に投入しました。 -- ぱんだ 2003-06-13 (金) 10:32:42
  • うまくいってるようです。 -- reimy 2003-06-13 (金) 11:48:11
    • と思ったら、ユーザー定義で次のような定義があるとうまくいかないようです。 -- reimy 2003-06-13 (金) 11:57:33
      "&" => "&", //全角&を半角表示に

      この場合、©と入力したものも©になってしまいます。ユーザー定義のあとでチェックが入るんですねぇ。うーん…困ったなあ。

  • 置換パターンの順序を調整しました。cvs:init.php(v1.4:r1.51)を試してみてください。 -- ぱんだ 2003-06-13 (金) 12:39:10
    • うまくいきましたm(__)m -- reimy 2003-06-13 (金) 14:54:33

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-27 (木) 14:47:10
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.168 sec.

OSDN