2 * Copyright (c) 2009 The openGion Project.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13 * either express or implied. See the License for the specific language
14 * governing permissions and limitations under the License.
16 package org.opengion.fukurou.util;
18 import org.opengion.fukurou.system.OgRuntimeException ; // 6.4.2.0 (2016/01/29)
19 import org.opengion.fukurou.security.HybsCryptography;
20 import static org.opengion.fukurou.system.HybsConst.CR; // 6.1.0.0 (2014/12/26) refactoring
21 import static org.opengion.fukurou.system.HybsConst.BUFFER_MIDDLE; // 6.1.0.0 (2014/12/26) refactoring
24 * XHTMLTag.java は、共通的に使用されるHTMLタグの生成メソッドを集約したクラスです。
26 * 全変数/メソッドは、public static final 宣言されています。
29 * @author Kazuhiko Hasegawa
32 public final class XHTMLTag {
34 /** URLチェックキー発行用 4.3.7.1 (2009/06/08) */
35 private static final HybsCryptography HYBS_CRYPTOGRAPHY = new HybsCryptography(); // 4.3.7.0 (2009/06/01)
40 * @og.rev 5.7.1.0 (2013/12/06) HTML5関連の属性を追加
42 private static final String[]
43 BUTTON_KEY = { "type","name","value","onClick"
44 ,"id","class","lang","dir","title","style","xml:lang"
45 ,"disabled","tabindex","accesskey"
46 ,"onBlur","onFocus","ondblClick","onMouseDown","onMouseUp"
47 ,"onMouseMove","onMouseOut","onMouseOver"
48 // 5.7.1.0 (2013/12/06) HTML5関連の属性
55 * なお、name と value は、この属性リストに含めていません。
56 * これは、#inputAttri( Attributes ) メソッドで、name 属性や value 属性など、
57 * 一般に都度変更されるフィールド以外を、固定値として作成しておくためです。
59 * @og.rev 5.7.1.0 (2013/12/06) HTML5関連の属性を追加
61 private static final String[]
62 INPUT_KEY = { "type","size","maxlength","checked","src"
63 ,"alt","accept","usemap","ismap"
64 ,"id","class","lang","dir","title","style","xml:lang"
65 ,"readonly","disabled","tabindex","accesskey","onClick","onChange"
66 ,"onBlur","onFocus","ondblClick","onMouseDown","onMouseUp"
67 ,"onMouseMove","onMouseOut","onMouseOver"
68 ,"onSelect","onKeydown","onKeypress","onKeyup"
69 // 5.7.1.0 (2013/12/06) HTML5関連の属性
70 ,"autocomplete","autofocus","pattern","placeholder","list","min","max","step","required"
74 * TEXTAREA タグの属性リストです。
76 * @og.rev 5.7.1.0 (2013/12/06) HTML5関連の属性を追加
78 private static final String[]
79 TEXTAREA_KEY = { "name","rows","cols"
80 ,"id","class","lang","dir","title","style","xml:lang"
81 ,"readonly","disabled","tabindex","accesskey","onClick"
82 ,"onBlur","onFocus","ondblClick","onMouseDown","onMouseUp"
83 ,"onMouseMove","onMouseOut","onMouseOver"
84 ,"onSelect","onKeydown","onKeypress","onKeyup"
85 // 5.7.1.0 (2013/12/06) HTML5関連の属性
86 ,"autofocus","placeholder"
93 * これは、UrlEncode 等行う必要がある為、別に処理する必要がある為です。
95 private static final String[]
96 LINK_KEY = { "type","name","hreflang","rel","rev","charset"
97 ,"target","shape","coords","onClick"
98 ,"id","class","lang","dir","title","style","xml:lang"
99 ,"tabindex","accesskey"
100 ,"onBlur","onFocus","ondblClick","onMouseDown","onMouseUp"
101 ,"onMouseMove","onMouseOut","onMouseOver"
107 * name 属性が無いのは、input と同様、name 属性のみ入れ替える事がある為。
109 * @og.rev 5.7.1.0 (2013/12/06) HTML5関連の属性を追加
111 private static final String[]
112 SELECT_KEY = { "size","multiple",
113 "id","class","lang","dir","title","style","xml:lang"
114 ,"disabled","tabindex","onClick","onChange"
115 ,"onBlur","onFocus","ondblClick","onMouseDown","onMouseUp"
116 ,"onMouseMove","onMouseOut","onMouseOver"
117 ,"onSelect","onKeydown","onKeypress","onKeyup"
118 // 5.7.1.0 (2013/12/06) HTML5関連の属性
126 private static final String[]
127 OPTION_KEY = { "value","label","selected"
128 ,"id","class","lang","dir","title","style","xml:lang"
136 private static final String[]
137 FRAME_KEY = { "name","longdesc","marginwidth","marginheight","noresize"
138 ,"scrolling","frameborder"
139 ,"id","class","title","style"
145 * @og.rev 5.9.1.2 (2015/10/23) 新規追加
147 private static final String[]
148 IFRAME_KEY = { "name","srcdoc","seamless","sandbox","width","height"
149 ,"marginwidth","marginheight","noresize","scrolling","frameborder"
150 ,"id","class","title","style"
157 private static final String[]
158 IMAGE_KEY = { "src","alt","longdesc","width","height","usemap","ismap","name","onClick"
159 ,"align","border","hspace","vspace" // この行は非推奨属性です。
160 ,"id","class","title","style","lang","dir","xml:lang"
161 ,"onBlur","onFocus","ondblClick","onMouseDown","onMouseUp"
162 ,"onMouseMove","onMouseOut","onMouseOver"
169 private static final String[]
170 FORM_KEY = { "action","method","enctype","accept-charset","accept","name","target"
171 ,"id","class","title","style","lang","dir","xml:lang"
177 * @og.rev 7.0.3.0 (2019/05/13) SPANの属性リストにonClick等の属性追加
179 private static final String[]
180 SPAN_KEY = { "id","class","title","style","lang","dir","xml:lang"
181 ,"tabindex","onClick" // 7.0.3.0 (2019/05/13)
182 ,"onFocus","ondblClick","onMouseDown","onMouseUp" // 7.0.3.0 (2019/05/13)
183 ,"onMouseMove","onMouseOut","onMouseOver" // 7.0.3.0 (2019/05/13)
184 ,"autofocus" // 7.0.3.0 (2019/05/13)
191 private static final String[]
192 PRE_KEY = { "id","class","title","style","lang","dir","xml:lang" };
195 * デフォルトコンストラクターをprivateにして、
196 * オブジェクトの生成をさせないようにする。
199 private XHTMLTag() { }
204 * <button type="形式" name="名前" value="送信文字" オプション・・・ >ラベル</button>
206 * <table class="plain">
207 * <caption>Attributes に設定できる属性</caption>
208 * <tr><td>name="名前"</td><td>オプション</td><td>LabelResource.properties のキー</td></tr>
209 * <tr><td>type="形式"</td><td>必須</td><td>submit/reset/button</td></tr>
210 * <tr><td>value="値"</td><td>オプション</td><td>name属性と共に送信される値</td></tr>
211 * <tr><td>disabled="disabled"</td><td>オプション</td><td>ボタンを利用できない状態にする場合に指定</td></tr>
212 * <tr><td>tabindex="Tab移動順"</td><td>オプション</td><td>0~32767の範囲で数字で指定(小さい順に移動)</td></tr>
213 * <tr><td>accesskey="ショートカットキー"</td><td>オプション</td><td>文字セット中の1文字:WindowsであればAltキーと同時使用</td></tr>
214 * <tr><td>汎用属性</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
215 * <tr><td>body="表示するタグ文字列"</td><td>オリジナル</td><td>画像や文字などボタン上に表示させたいタグの文字列</td></tr>
225 * ラベルに、HTMLテキスト(強調文字など)をはめ込むことが出来ます。
226 * また、イメージ <img ・・・・> を指定することも可能です。
227 * disabled="disabled" のとき、このボタンのデータはサーバーに送信されません。
228 * 属性群は、タグの中にCSS等で使用できる class="XXX" などの
229 * 汎用属性を自由に登録する事が出来ます。
231 * @og.rev 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
238 public static String button( final Attributes attri ) {
239 final String checkedType = "|submit|reset|button|";
241 final String type = attri.get( "type" );
242 if( checkedType.indexOf( "|" + type + "|" ) < 0 ) {
243 final String errMsg = "button タイプ設定エラー [" + type + "]";
244 throw new OgRuntimeException( errMsg );
247 String body = attri.get( "body" );
248 if( body == null ) { body = "" ; }
250 // 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
251 return new TagBuffer( "button" )
252 .add( attri.getAttribute( BUTTON_KEY ) )
260 * <input type="text" name="名前" value="送信文字" ....>
262 * <table class="plain">
263 * <caption>Attributes に設定できる属性</caption>
264 * <tr><td>name="名前"</td><td>オプション</td><td>LabelResource.properties のキー</td></tr>
265 * <tr><td>type="形式"</td><td>必須</td><td>text/password/checkbox/radio/submit/reset/button/image/file/hidden</td></tr>
266 * <tr><td>value="値"</td><td>オプション</td><td>name属性と共に送信される値</td></tr>
267 * <tr><td>size="30"</td><td>オプション</td><td>inputタグの大きさ</td></tr>
268 * <tr><td>maxlength="50"</td><td>オプション</td><td>type属性が「text」,「password」 のときの最大文字数</td></tr>
269 * <tr><td>checked="checked"</td><td>オプション</td><td>type属性が「checkbox」,「radio」 の場合に選択されている状態にする。</td></tr>
270 * <tr><td>disabled="disabled"</td><td>オプション</td><td>選択や変更の操作をできない状態にする場合に指定</td></tr>
271 * <tr><td>accept="MIMEタイプ"</td><td>オプション</td><td>type属性が「file」の場合に処理可能なMIMEタイプを指定</td></tr>
272 * <tr><td>tabindex="Tab移動順"</td><td>オプション</td><td>0~32767の範囲で数字で指定(小さい順に移動)</td></tr>
273 * <tr><td>accesskey="ショートカットキー"</td><td>オプション</td><td>文字セット中の1文字:WindowsであればAltキーと同時使用</td></tr>
274 * <tr><td>src="URL"</td><td>オプション</td><td>type属性が「image」の場合送信ボタンの画像URLを指定</td></tr>
275 * <tr><td>alt="代替文字列"</td><td>オプション</td><td>type属性が「image」の場合、画像が表示できないときの代替文字列を指定</td></tr>
276 * <tr><td>汎用属性</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
277 * <tr><td>body="表示するタグ文字列"</td><td>オリジナル</td><td>画像や文字などボタン上に表示させたいタグの文字列</td></tr>
278 * <tr><td>サポート外</td><td>未実装</td><td>readonly属性、usemap属性、ismap属性、align属性</td></tr>
283 * password パスワード用テキストフィールド
284 * checkbox チェックボックス(複数選択可)
285 * radio ラジオボタン(複数選択不可)
287 * hidden 表示せずにサーバーに送信する。
293 * HTML5 より、以下のtypeが指定可能になりました。(ブラウザによってサポート状況は異なります。)
294 * search 検索テキストの入力欄を作成する
297 * email メールアドレスの入力欄を作成する
298 * datetime UTC(協定世界時)による日時の入力欄を作成する
303 * datetime-local UTC(協定世界時)によらないローカル日時の入力欄を作成する
308 * ラジオボタン/チェックボックスであらかじめ、チェックをして
309 * おきたい場合は、checked 属性に "checked" を登録します。
310 * ファイルダイアログの場合は、attributesの accept 属性に "MIMEタイプ"
312 * 属性群は、タグの中にCSS等で使用できる class="XXX" などの
314 * CSSでクラスを対応 class="XXXX"
315 * タブで移動順を指定する tabindex="タブ順"
316 * ショートカットキーを割り当てる accesskey="ショートカットキー"
320 * @return 入力フォームタグ文字列
322 * @see #input( Attributes attri,String name,String value,String optAtt )
324 public static String input( final Attributes attri ) {
325 final String name = attri.get( "name" );
326 final String value = attri.get( "value" );
327 final String optAttri = attri.get( "optionAttributes" );
329 return input( attri,name,value,optAttri );
335 * <input type="text" name="名前" value="送信文字" ....>
337 * <table class="plain">
338 * <caption>Attributes に設定できる属性</caption>
339 * <tr><td>name="名前"</td><td>オプション</td><td>LabelResource.properties のキー</td></tr>
340 * <tr><td>type="形式"</td><td>必須</td><td>text/password/checkbox/radio/submit/reset/button/image/file/hidden</td></tr>
341 * <tr><td>value="値"</td><td>オプション</td><td>name属性と共に送信される値</td></tr>
342 * <tr><td>size="30"</td><td>オプション</td><td>inputタグの大きさ</td></tr>
343 * <tr><td>maxlength="50"</td><td>オプション</td><td>type属性が「text」,「password」 のときの最大文字数</td></tr>
344 * <tr><td>checked="checked"</td><td>オプション</td><td>type属性が「checkbox」,「radio」 の場合に選択されている状態にする。</td></tr>
345 * <tr><td>disabled="disabled"</td><td>オプション</td><td>選択や変更の操作をできない状態にする場合に指定</td></tr>
346 * <tr><td>accept="MIMEタイプ"</td><td>オプション</td><td>type属性が「file」の場合に処理可能なMIMEタイプを指定</td></tr>
347 * <tr><td>tabindex="Tab移動順"</td><td>オプション</td><td>0~32767の範囲で数字で指定(小さい順に移動)</td></tr>
348 * <tr><td>accesskey="ショートカットキー"</td><td>オプション</td><td>文字セット中の1文字:WindowsであればAltキーと同時使用</td></tr>
349 * <tr><td>src="URL"</td><td>オプション</td><td>type属性が「image」の場合送信ボタンの画像URLを指定</td></tr>
350 * <tr><td>alt="代替文字列"</td><td>オプション</td><td>type属性が「image」の場合、画像が表示できないときの代替文字列を指定</td></tr>
351 * <tr><td>汎用属性</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
352 * <tr><td>body="表示するタグ文字列"</td><td>オリジナル</td><td>画像や文字などボタン上に表示させたいタグの文字列</td></tr>
353 * <tr><td>サポート外</td><td>未実装</td><td>readonly属性、usemap属性、ismap属性、align属性</td></tr>
358 * password パスワード用テキストフィールド
359 * checkbox チェックボックス(複数選択可)
360 * radio ラジオボタン(複数選択不可)
362 * hidden 表示せずにサーバーに送信する。
368 * HTML5 より、以下のtypeが指定可能になりました。(ブラウザによってサポート状況は異なります。)
369 * search 検索テキストの入力欄を作成する
372 * email メールアドレスの入力欄を作成する
373 * datetime UTC(協定世界時)による日時の入力欄を作成する
378 * datetime-local UTC(協定世界時)によらないローカル日時の入力欄を作成する
383 * ラジオボタン/チェックボックスであらかじめ、チェックをして
384 * おきたい場合は、checked 属性に "checked" を登録します。
385 * ファイルダイアログの場合は、attributesの accept 属性に "MIMEタイプ"
387 * 属性群は、タグの中にCSS等で使用できる class="XXX" などの
389 * CSSでクラスを対応 class="XXXX"
390 * タブで移動順を指定する tabindex="タブ順"
391 * ショートカットキーを割り当てる accesskey="ショートカットキー"
393 * @og.rev 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
394 * @og.rev 6.2.2.2 (2015/04/03) NO_MAXLEN キーの値が、"true" の場合、maxlength を強制削除する。
399 * @param optAttri オプション文字列(タグ属性定義されていない属性の登録用文字列)
401 * @return 入力フォームタグ文字列
404 public static String input( final Attributes attri,final String name,final String value,final String optAttri ) {
406 // 6.2.2.2 (2015/04/03) NO_MAXLEN キーの値が、"true" の場合、maxlength を強制削除する。
407 if( "true".equalsIgnoreCase( attri.get( "NO_MAXLEN" ) ) ) {
408 attri.remove( "maxlength" );
411 // 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
412 return new TagBuffer( "input" )
413 .add( "name" , name )
414 .add( "value" , value )
415 .add( attri.getAttribute( INPUT_KEY ) )
421 * 入力フォームの属性情報のみの文字列を作成します。
422 * これは、name 属性や value 属性など、一般に都度変更されるフィールド
423 * 以外の固定的な属性情報を、先に作成しておく場合に、使用します。
425 * @og.rev 6.2.2.2 (2015/04/03) NO_MAXLEN キーの値が、"true" の場合、maxlength を強制削除する。
429 * @return 入力フォームタグの属性情報文字列
432 public static String inputAttri( final Attributes attri ) {
433 // 6.2.2.2 (2015/04/03) NO_MAXLEN キーの値が、"true" の場合、maxlength を強制削除する。
434 if( "true".equalsIgnoreCase( attri.get( "NO_MAXLEN" ) ) ) {
435 attri.remove( "maxlength" );
437 return attri.getAttribute( INPUT_KEY );
441 * テキストエリアの属性情報のみの文字列を作成します。
442 * これは、name 属性や value 属性など、一般に都度変更されるフィールド
443 * 以外の固定的な属性情報を、先に作成しておく場合に、使用します。
447 * @return テキストエリアの属性情報文字列
450 public static String textareaAttri( final Attributes attri ) {
451 return attri.getAttribute( TEXTAREA_KEY );
455 * プルダウン等のメニューの属性情報のみの文字列を作成します。
456 * これは、name 属性や value 属性など、一般に都度変更されるフィールド
457 * 以外の固定的な属性情報を、先に作成しておく場合に、使用します。
461 * @return プルダウン等のメニューの属性情報文字列
464 public static String selectAttri( final Attributes attri ) {
465 return attri.getAttribute( SELECT_KEY );
471 * id属性に、name と同じ値が設定されます。
473 * @og.rev 5.5.4.0 (2012/07/02) ID属性追加
475 * @param name フォームの名前
478 * @return HIDDENフォームタグ文字列
481 public static String hidden( final String name,final String value ) {
482 return hidden( name,value,name );
488 * @og.rev 5.5.4.0 (2012/07/02) ID属性追加
489 * @og.rev 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
491 * @param name フォームの名前
495 * @return HIDDENフォームタグ文字列
498 public static String hidden( final String name, final String value, final String id ) {
500 // 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
501 return new TagBuffer( "input" )
502 .add( "type" , "hidden" )
503 .add( "name" , name )
504 .add( "value" , value )
512 * <textarea name="名前" rows="4" cols="40" ....>送信文字列 </textarea>
514 * <table class="plain">
515 * <caption>Attributes に設定できる属性</caption>
516 * <tr><td>name="名前"</td><td>オプション</td><td>LabelResource.properties のキー</td></tr>
517 * <tr><td>rows="行数"</td><td>オプション</td><td>入力フィールドの表示行数</td></tr>
518 * <tr><td>cols="幅"</td><td>オプション</td><td>入力フィールドの表示幅(文字数)</td></tr>
519 * <tr><td>disabled="disabled"</td><td>オプション</td><td>選択や変更の操作をできない状態にする場合に指定</td></tr>
520 * <tr><td>tabindex="Tab移動順"</td><td>オプション</td><td>0~32767の範囲で数字で指定(小さい順に移動)</td></tr>
521 * <tr><td>accesskey="ショートカットキー"</td><td>オプション</td><td>文字セット中の1文字:WindowsであればAltキーと同時使用</td></tr>
522 * <tr><td>汎用属性</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
523 * <tr><td>value="値"</td><td>オリジナル</td><td>name属性と共に送信される値</td></tr>
524 * <tr><td>body="表示するタグ文字列"</td><td>オリジナル</td><td>画像や文字などボタン上に表示させたいタグの文字列</td></tr>
525 * <tr><td>サポート外</td><td>未実装</td><td>readonly属性</td></tr>
530 * 属性群は、タグの中にCSS等で使用できる class="XXX" などの
532 * CSSでクラスを対応 class="XXXX"
533 * タブで移動順を指定する tabindex="タブ順"
534 * ショートカットキーを割り当てる accesskey="ショートカットキー"
536 * @og.rev 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
537 * @og.rev 8.0.0.0 (2021/07/31) optionAttributes が設定されなかったので、追加
541 * @return 入力フォームタグ文字列
544 public static String textarea( final Attributes attri ) {
545 String body = attri.get( "body" );
546 if( body == null ) { body = "" ; }
548 // 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
549 return new TagBuffer( "textarea" )
550 .add( attri.getAttribute( TEXTAREA_KEY ) )
551 .add( attri.get( "optionAttributes" ) ) // 8.0.0.0 (2021/07/31)
559 * <A href="URL" target="ターゲット名">ラベル</A>
561 * <table class="plain">
562 * <caption>Attributes に設定できる属性</caption>
563 * <tr><td>href="URL"</td><td>必須</td><td>リンク先のURLを指定します。</td></tr>
564 * <tr><td>charset="文字セット"</td><td>オプション</td><td>リンク先の文字コードセットを指定します。</td></tr>
565 * <tr><td>hreflang="言語セット"</td><td>オプション</td><td>リンク先の基本となる言語コードを指定します。</td></tr>
566 * <tr><td>type="MIMEタイプ"</td><td>オプション</td><td>リンク先のMIMEタイプを指定します。</td></tr>
567 * <tr><td>name="名前"</td><td>オプション</td><td>この要素をリンクの到達点とするための名前を指定します。</td></tr>
568 * <tr><td>rel="リンクタイプ"</td><td>オプション</td><td>この文書からみた href 属性で指定されるリンク先との関係</td></tr>
569 * <tr><td>rev="リンクタイプ"</td><td>オプション</td><td>href 属性で指定されるリンク先からみた、この文書との関係</td></tr>
570 * <tr><td>tabindex="Tab移動順"</td><td>オプション</td><td>0~32767の範囲で数字で指定(小さい順に移動)</td></tr>
571 * <tr><td>accesskey="ショートカットキー"</td><td>オプション</td><td>文字セット中の1文字:WindowsであればAltキーと同時使用</td></tr>
572 * <tr><td>target="フレーム名"</td><td>オプション</td><td>リンク先のフレーム名</td></tr>
573 * <tr><td>body="表示するタグ文字列"</td><td>オリジナル</td><td>画像や文字などをリンクにできます。</td></tr>
574 * <tr><td>汎用属性</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
575 * <tr><td>サポート外</td><td>未実装</td><td>shape属性、coords属性</td></tr>
580 * ラベルなしの場合、href属性の "URL" そのものを付けます。
584 * _top フレームを解除して、リンク先をフレーム全体に表示する。
585 * _parent リンク先を親フレームに表示する。
586 * _self リンク先を自分自身に表示する。
587 * _blank 新しいウインドウを開いて表示する。
588 * その他 フレーム作成時の名前で指定可能。
591 * なしの場合 _self (自分自身)を指定します。
594 * URLを mailto:メールアドレス で設定すれば、メール送信ダイアログを
597 * 画像をクリックするリンクは、ラベルの個所に <img>タグを設定します。
599 * <a href="books.html"><img src="banner.gif" width="468px" height="60px" alt="関連書籍紹介" border="0"></a>
601 * 属性群は、タグの中にCSS等で使用できる class="XXX" などの
603 * CSSでクラスを対応 class="XXXX"
604 * タブで移動順を指定する tabindex="タブ順"
605 * ショートカットキーを割り当てる accesskey="ショートカットキー"
609 * @return ページリンクタグ文字列
612 public static String link( final Attributes attri ) {
613 return link( attri,"" );
619 * @og.rev 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
622 * @param urlEncode 文字列 ( ?key1=val1&・・・・ という文字列 無いときは "" )
624 * @return ページリンクタグ文字列
627 public static String link( final Attributes attri, final String urlEncode ) {
628 final String href = attri.get( "href" );
629 final String url = addUrlEncode( href,urlEncode );
630 final String body = StringUtil.nval( attri.get( "body" ), href );
632 // 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
633 return new TagBuffer( "a" )
635 .add( attri.getAttribute( LINK_KEY ) )
636 .addBody( body ) // body が null の場合、href を代わりに出力
641 * xlink 形式のページリンクを作成します。
643 * 基本的には、link と同じです。アドレスの指定も、href で指定してください。
644 * 内部的に、xlink:href に変換します。
645 * また、URL引数を、"&" で結合するのではなく、"&amp;" で結合させます。
646 * これは、xlink そのものが、XML上に記述された場合に、XMLのルールで再度パース
649 * @og.rev 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
652 * @param urlEncode 文字列 ( ?key1=val1&・・・・ という文字列 無いときは "" )
654 * @return ページリンクタグ文字列
657 public static String xlink( final Attributes attri, final String urlEncode ) {
658 final String href = attri.get( "href" );
659 final String url = addUrlEncode( href,urlEncode,"&" );
660 final String body = StringUtil.nval( attri.get( "body" ), href );
662 // 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
663 return new TagBuffer( "a" )
664 .add( "xlink:href" , url )
665 .add( attri.getAttribute( LINK_KEY ) )
666 .addBody( body ) // body が null の場合、href を代わりに出力
674 * @param opt 選択肢(オプション)
679 public static String select( final Attributes attri,final Options opt ) {
680 final String name = attri.get( "name" );
681 final String optAttri = attri.get( "optionAttributes" );
683 return select( attri,opt,name,optAttri );
689 * <select size="行数" name="名前" multiple>
690 * <option value="送信文字1">コメント</option>
691 * <option value="送信文字2">コメント</option>
692 * <option value="送信文字3" selected="selected">コメント</option>
695 * <table class="plain">
696 * <caption>Attributes に設定できる属性</caption>
697 * <tr><td>name="名前"</td><td>オプション</td><td>LabelResource.properties のキー</td></tr>
698 * <tr><td>size="行数"</td><td>オプション</td><td>select要素をリストボックスとして表示する場合の行数</td></tr>
699 * <tr><td>multiple="multiple"</td><td>オプション</td><td>選択肢の中から複数選択出来るようにする。</td></tr>
700 * <tr><td>disabled="disabled"</td><td>オプション</td><td>選択や変更の操作をできない状態にする場合に指定</td></tr>
701 * <tr><td>tabindex="Tab移動順"</td><td>オプション</td><td>0~32767の範囲で数字で指定(小さい順に移動)</td></tr>
702 * <tr><td>汎用属性</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
705 * 属性群は、タグの中にCSS等で使用できる class="XXX" などの
707 * CSSでクラスを対応 class="XXXX"
709 * @og.rev 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
712 * @param opt 選択肢(オプション)
714 * @param optAttri オプション属性
719 public static String select( final Attributes attri,final Options opt,final String name,final String optAttri ) {
721 // 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
722 return new TagBuffer( "select" )
723 .add( "name" , name )
724 .add( attri.getAttribute( SELECT_KEY ) )
726 .addBody( opt.getOption() )
733 * <select size="行数" name="名前" multiple>
734 * <option value="送信文字1">コメント</option>
735 * <option value="送信文字2">コメント</option>
736 * <option value="送信文字3" selected="selected">コメント</option>
739 * <table class="plain">
740 * <caption>Attributes に設定できる属性</caption>
741 * <tr><td>value="値"</td><td>オプション</td><td>送信する値</td></tr>
742 * <tr><td>selected="selected"</td><td>オプション</td><td>選択肢をあらかじめ選択された状態にしておく</td></tr>
743 * <tr><td>disabled="disabled"</td><td>オプション</td><td>選択や変更の操作をできない状態にする場合に指定</td></tr>
744 * <tr><td>body="表示するタグ文字列"</td><td>オリジナル</td><td>選択肢に表示させたいタグの文字列</td></tr>
745 * <tr><td>汎用属性</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
748 * セレクタとは、リストボックスやメニューなどの option引数にセットする
749 * 複数のデータをoptionタグでくるんだものです。
751 * @og.rev 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
757 * @see #option( Attributes,String )
759 public static String option( final Attributes attri ) {
760 final String body = StringUtil.nval( attri.get( "body" ), " " ); // "No Label" を止めてスペースにする。
762 // 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
763 return new TagBuffer( "option" )
764 .add( attri.getAttribute( OPTION_KEY ) )
772 * これは、addKeyLabel引数を考慮した、オプションタグ文字列の作成処理を行います。
773 * true を指定すると、「強制的に」キー:ラベル形式で表示します。
774 * false の場合は、「強制的に」ラベルのみで表示されます。
775 * 初期値の null の場合、指定のままのラベルで作成します。
777 * @og.rev 6.0.4.0 (2014/11/28) キー:ラベル形式で表示するかどうか。新規追加
780 * @param addKeyLabel true:キー:ラベル形式/false:ラベルのみ/null:指定通り
784 * @see #option( Attributes )
786 public static String option( final Attributes attri , final String addKeyLabel ) {
787 if( addKeyLabel != null ) {
788 final String val = attri.get( "value" );
789 String lbl = attri.get( "label" );
790 String lblKey = "label" ;
791 if( lbl == null ) { // label がなければ、body が表示されるので。
792 lbl = attri.get( "body" );
796 if( val != null && lbl != null ) {
797 final boolean isKeyLbl = "true".equalsIgnoreCase( addKeyLabel );
798 final boolean useKey = lbl.startsWith( val + ':' ) ; // すでに、ラベルにキーが付与されている。
800 // addKeyLabel するが、ラベルが付与されていない。
801 if( isKeyLbl && !useKey ) {
802 attri.set( lblKey , val + ':' + lbl );
804 // addKeyLabel しないが、ラベルが付与されている。
805 else if( !isKeyLbl && useKey ) {
806 attri.set( lblKey , lbl.substring( (val + ':').length() ) ); // ラベルからキー部分を削除する。
811 return option( attri );
817 * <frame marginheight="2px" marginwidth="2px" src="query.jsp" name="QUERY" />
819 * <table class="plain">
820 * <caption>Attributes に設定できる属性</caption>
821 * <tr><td>src="URL"</td><td>オプション</td><td>フレームの表示先URLを指定します。</td></tr>
822 * <tr><td>name="フレーム名"</td><td>オプション</td><td>フレームに付ける名前を指定します。</td></tr>
823 * <tr><td>longdesc="URI"</td><td>オプション</td><td>フレームの詳しい説明のURI</td></tr>
824 * <tr><td>marginwidth="左右のマージン"</td><td>オプション</td><td>フレーム内の左右のマージンを指定します。</td></tr>
825 * <tr><td>marginheight="上下のマージン"</td><td>オプション</td><td>フレーム内の上下のマージンを指定します。</td></tr>
826 * <tr><td>noresize="noresize"</td><td>オプション</td><td>フレームサイズを変更できないようにします。</td></tr>
827 * <tr><td>scrolling="スクロールの制御"</td><td>オプション</td><td>yes:スクロールバーを表示 no:表示しない auto:必要に応じて表示(デフォルト)</td></tr>
828 * <tr><td>frameborder="枠の表示"</td><td>オプション</td><td>0:枠を表示しない 1:枠を表示する。(デフォルト)</td></tr>
829 * <tr><td>keys="引数にセットするキー"</td><td>オプション</td><td>URI の引数にセットするキーを CSV形式でセットします。</td></tr>
830 * <tr><td>value="引数にセットする値"</td><td>オプション</td><td>URI の引数にセットする値を CSV形式でセットします。</td></tr>
831 * <tr><td>汎用属性</td><td>オプション</td><td>class,id,title,style</td></tr>
840 * auto:必要に応じてスクロールバーを表示(デフォルト)
851 * 属性群は、タグの中にCSS等で使用できる class="XXX" などの
853 * CSSでクラスを対応 class="XXXX"
860 public static String frame( final Attributes attri ) {
861 return frame( attri,"" );
867 * @og.rev 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
870 * @param urlEncode 文字列 ( ?key1=val1&・・・・ という文字列 無いときは "" )
875 public static String frame( final Attributes attri,final String urlEncode ) {
876 // 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
877 return new TagBuffer( "frame" )
878 .add( "src" , addUrlEncode( attri.get( "src" ),urlEncode ) )
879 .add( attri.getAttribute( FRAME_KEY ) )
887 * @param urlEncode 文字列 ( ?key1=val1&・・・・ という文字列 無いときは "" )
889 * @og.rev 5.9.1.2 (2015/10/23) 新規追加
890 * @og.rev 6.3.9.0 (2015/11/06) TagBuffer を使用するように変更
891 * @og.rev 6.3.9.0 (2015/11/06) TagBuffer を使用するように変更
892 * @og.rev 7.4.2.0 (2021/05/08) optionAttributes 追加
894 * @return インラインフレームタグ文字列
896 public static String iframe( final Attributes attri,final String urlEncode ) {
898 return new TagBuffer( "iframe" )
899 .add( "src" , addUrlEncode( attri.get( "src" ),urlEncode ) )
900 .add( attri.getAttribute( IFRAME_KEY ) )
901 .add( attri.get( "optionAttributes" ) ) // 7.4.2.0 (2021/05/08)
902 .addBody( "<!-- -->" ) // iframeは自己終了できない
908 * エンコードすべき文字列が無い場合は、0ストリング("") を返します。
909 * エンコード文字列がある場合は、"?KEY1=VAL1&KEY2=VAL2&・・・" という文字列を
911 * つまり、どちらのケースでも、URI に 連結させればよいことになります。
913 * @param keys URLの引数となるキー群
914 * @param values URLの引数となる値群
916 * @return URLエンコード文字列
919 public static String urlEncode( final String keys,final String values ) {
920 return urlEncode( keys,values,"&" );
925 * エンコードすべき文字列が無い場合は、0ストリング("") を返します。
926 * エンコード文字列がある場合は、"?KEY1=VAL1&KEY2=VAL2&・・・" という文字列を
928 * つまり、どちらのケースでも、URI に 連結させればよいことになります。
930 * @param keys URLの引数となるキー群
931 * @param values URLの引数となる値群
932 * @param join URLの引数群を連結させる文字列
934 * @return URLエンコード文字列
937 public static String urlEncode( final String keys,final String values,final String join ) {
938 if( keys == null || values == null ) { return ""; }
940 final String[] key = StringUtil.csv2Array( keys );
941 final String[] val = StringUtil.csv2Array( values );
943 return urlEncode( key,val,join ) ;
948 * エンコードすべき文字列が無い場合は、0ストリング("") を返します。
949 * エンコード文字列がある場合は、"?KEY1=VAL1&KEY2=VAL2&・・・" という文字列を
951 * つまり、どちらのケースでも、URI に 連結させればよいことになります。
953 * @param key URLの引数となるキーの配列
954 * @param val URLの引数となる値の配列
956 * @return URLエンコード文字列
959 public static String urlEncode( final String[] key,final String[] val ) {
960 return urlEncode( key,val,"&" );
965 * エンコードすべき文字列が無い場合は、0ストリング("") を返します。
966 * エンコード文字列がある場合は、"?KEY1=VAL1&KEY2=VAL2&・・・" という文字列を
968 * つまり、どちらのケースでも、URI に 連結させればよいことになります。
970 * @og.rev 5.10.15.3 (2019/09/27) fenc追加対応で作成
972 * @param key URLの引数となるキーの配列
973 * @param val URLの引数となる値の配列
974 * @param join URLの引数群を連結させる文字列
976 * @return URLエンコード文字列
978 public static String urlEncode( final String[] key,final String[] val,final String join ) {
979 return urlEncode( key, val, join, false);
984 * エンコードすべき文字列が無い場合は、0ストリング("") を返します。
985 * エンコード文字列がある場合は、"?KEY1=VAL1&KEY2=VAL2&・・・" という文字列を
987 * つまり、どちらのケースでも、URI に 連結させればよいことになります。
989 * @og.rev 4.3.3.3 (2008/10/22) valに対して副作用を及ぼさないように修正
990 * @og.rev 5.10.12.4 (2019/06/21) keyのURIエンコードを追加
991 * @og.rev 5.10.15.3 (2019/09/27) fencフラグ追加
993 * @param key URLの引数となるキーの配列
994 * @param val URLの引数となる値の配列
995 * @param join URLの引数群を連結させる文字列
996 * @param fenc 先頭が[の場合でも強制エンコードするためのフラグ(初期値false)
998 * @return URLエンコード文字列
1001 // public static String urlEncode( final String[] key,final String[] val,final String join ) {
1002 public static String urlEncode( final String[] key,final String[] val,final String join, final boolean fenc ) {
1003 if( key == null || key.length == 0 || val == null || val.length == 0 ) {
1006 else if( key.length != val.length ) {
1007 final String errMsg = "urlEncode のキーとバリューの個数が異なります。" + CR
1008 + "key.length=[" + key.length + "] val.length=[" + val.length + "]";
1009 throw new OgRuntimeException( errMsg );
1012 // 4.3.3.3 (2008/10/22)
1013 String[] tval = new String[val.length];
1015 for( int i=0; i<val.length; i++ ) {
1016 if( key[i] == null || key[i].isEmpty() ) { return ""; }
1017 if( val[i] == null || val[i].isEmpty() ) { tval[i] = ""; }
1018 // else if( val[i].charAt(0) == '[' ) { // 暫定対応
1019 else if( val[i].charAt(0) == '[' && !fenc ) { // 5.10.15.3 (2019/09/27) fenc追加
1023 tval[i] = StringUtil.urlEncode( val[i] );
1027 final StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
1029 // 6.0.2.5 (2014/10/31) char を append する。
1030 // rtn.append( key[0] ).append( '=' ).append( tval[0] );
1031 rtn.append( StringUtil.urlEncode( key[0]) ).append( '=' ).append( tval[0] ); // 5.10.12.4 (2019/06/21)
1032 for( int i=1; i<key.length; i++ ) {
1034 // rtn.append( key[i] ).append( '=' ).append( tval[i] );
1035 rtn.append( StringUtil.urlEncode(key[i]) ).append( '=' ).append( tval[i] ); // 5.10.12.4 (2019/06/21)
1037 return rtn.toString();
1041 * URL文字列に、URLエンコード文字列を連結します。
1043 * URL文字列中にすでに "?" 文字が存在する場合は、URLエンコード側の
1044 * 文字列とは、 "&" で連結します。
1045 * 逆に、"?" が存在しなければ、"?" で連結します。
1046 * URLエンコード文字列が null の場合は、連結しません。
1049 * @param encode URLエンコード文字列
1054 public static String addUrlEncode( final String url,final String encode ) {
1055 return addUrlEncode( url,encode,"&" );
1059 * URL文字列に、URLエンコード文字列を連結します。
1061 * URL文字列中にすでに "?" 文字が存在する場合は、URLエンコード側の
1062 * 文字列とは、 join (例 "&" ) で連結します。
1063 * 逆に、"?" が存在しなければ、"?" で連結します。
1064 * URLエンコード文字列が null の場合は、連結しません。
1065 * 連結する、encode 文字列の先頭が、join 文字列の場合、そのまま連結します。
1066 * 先頭が、そうでない場合は、join 文字列で連結します。
1067 * "?" が存在せず、encode 文字列の先頭が、join 文字列の場合は、
1068 * encode 文字列の先頭を取り除いて、"?" で連結します。
1071 * ①. abc.html key1=val1&key2=val2 ⇒ abc.html?key1=val1&key2=val2
1072 * ②.abc.html &key1=val1&key2=val2 ⇒ abc.html?key1=val1&key2=val2
1073 * ③.abc.html?key1=val1 key2=val2 ⇒ abc.html?key1=val1&key2=val2
1074 * ④.abc.html?key1=val1 &key2=val2 ⇒ abc.html?key1=val1&key2=val2
1076 * @og.rev 5.2.1.0 (2010/10/01) urlがnullの場合に、NullPointerExceptionが発生するバグを修正
1079 * @param encode URLエンコード文字列
1080 * @param join URLの引数群を連結させる文字列
1085 public static String addUrlEncode( final String url,final String encode,final String join ) {
1086 // 5.2.1.0 (2010/10/01) urlがnullの場合に、NullPointerExceptionが発生するバグを修正
1087 final String tmpUrl = ( url == null ? "" : url );
1089 if( encode == null || encode.isEmpty() ) { return tmpUrl; }
1092 if( tmpUrl.indexOf( '?' ) < 0 ) {
1093 if( encode.startsWith( join ) ) {
1094 rtn = tmpUrl + "?" + encode.substring(join.length()); // ②
1097 rtn = tmpUrl + "?" + encode; // ①
1101 if( encode.startsWith( join ) ) {
1102 rtn = tmpUrl + encode; // ④
1105 rtn = tmpUrl + join + encode; // ③
1114 * alt属性だけ設定されて、title属性が未設定の場合、title属性にもalt属性と同じ値を設定しておきます。
1115 * 本来は、それぞれに役割があるので、同じ値を設定するのは行儀が悪いのですが、
1116 * ブラウザの互換性など、色々な関係で、このように設定しています。
1117 * alt属性 :「その画像が表している”文脈”」を書く
1118 * title属性 :「画像」の補足説明を書く
1120 * @og.rev 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
1121 * @og.rev 6.4.2.0 (2016/01/29) alt属性にtitle属性を追記。
1128 public static String img( final Attributes attri ) {
1129 // 6.4.2.0 (2016/01/29) title属性がなければ、alt属性を設定しておく。
1130 final String title = attri.get( "title" );
1131 if( title == null ) {
1132 attri.set( "title" , attri.get( "alt" ) );
1135 // 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
1136 return new TagBuffer( "img" )
1137 .add( attri.getAttribute( IMAGE_KEY ) )
1144 * <form action="URI" method="HTTPメソッド" enctype="MIMEタイプ" target="フレーム名" ・・・ >フォーム等</form>
1146 * <table class="plain">
1147 * <caption>Attributes に設定できる属性</caption>
1148 * <tr><td>action="URI"</td><td>必須</td><td>送信されたフォームデータを処理するプログラムURI</td></tr>
1149 * <tr><td>method="HTTPメソッド"</td><td>オプション</td><td>get/post</td></tr>
1150 * <tr><td>enctype="MIMEタイプ"</td><td>オプション</td><td>フォームデータ送信時のMIMEタイプ</td></tr>
1151 * <tr><td>accept-charset="文字セット"</td><td>オプション</td><td>データとして受付可能な文字セットの指定</td></tr>
1152 * <tr><td>accept="MIMEタイプ"</td><td>オプション</td><td>データとして処理可能なMIMEタイプを指定</td></tr>
1153 * <tr><td>name="名前"</td><td>オプション</td><td>スクリプト等から参照する場合の名前</td></tr>
1154 * <tr><td>target="フレーム名"</td><td>オプション</td><td>フォームを送信した結果を表示させるフレーム</td></tr>
1155 * <tr><td>汎用属性</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
1156 * <tr><td>body="フォーム等の文字列"</td><td>必須</td><td>input 等のフォーム要素</td></tr>
1159 * @og.rev 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
1166 public static String form( final Attributes attri ) {
1167 String body = attri.get( "body" );
1168 if( body == null ) { body = "" ; }
1170 // 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
1171 return new TagBuffer( "form" )
1172 .add( attri.getAttribute( FORM_KEY ) )
1178 * 汎用インライン要素(SPAN)を作成します。
1180 * <span class="XXXX" ・・・ >テキスト等</span>
1182 * <table class="plain">
1183 * <caption>Attributes に設定できる属性</caption>
1184 * <tr><td>汎用属性</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
1185 * <tr><td>body="テキスト等の文字列"</td><td>オプション</td><td>このテキストを修飾します。</td></tr>
1188 * @og.rev 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
1195 public static String span( final Attributes attri ) {
1196 String body = attri.get( "body" );
1197 if( body == null ) { body = "" ; }
1199 // 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
1200 return new TagBuffer( "span" )
1201 .add( attri.getAttribute( SPAN_KEY ) )
1202 .add( attri.get( "optionAttributes" ) )
1208 * 整形済みテキスト(PRE)を作成します。
1210 * <pre class="XXXX" ・・・ >テキスト等</pre>
1212 * <table class="plain">
1213 * <caption>Attributes に設定できる属性</caption>
1214 * <tr><td>汎用属性</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
1215 * <tr><td>body="テキスト等の文字列"</td><td>オプション</td><td>このテキストを修飾します。</td></tr>
1218 * @og.rev 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
1225 public static String pre( final Attributes attri ) {
1226 String body = attri.get( "body" );
1227 if( body == null ) { body = "" ; }
1229 // 6.2.0.0 (2015/02/27) TagBuffer を使用するように変更。
1230 return new TagBuffer( "pre" )
1231 .add( attri.getAttribute( PRE_KEY ) )
1232 .add( attri.get( "optionAttributes" ) )
1240 * 引数に指定されたhrefに対して、時間とユーザーIDを付加した暗号化文字列を
1243 * 暗号化は、org.opengion.fukurou.security.HybsCryptographyを使用します。
1244 * 暗号化を行う文字列のフォーマットは、[href],time=[checkTime],userid=[loginUser]です。
1246 * @og.rev 4.3.7.1 (2009/06/08) 新規追加
1247 * @og.rev 4.3.7.4 (2009/07/01) 循環参照を解消
1248 * @og.rev 5.8.8.0 (2015/06/05) キー指定対応で別メソッドに処理を委譲
1250 * @param href チェック対象のURL
1251 * @param key チェックキーのパラメーターキー
1252 * @param userid ユーザーID
1257 * @see org.opengion.fukurou.security.HybsCryptography
1259 public static String addURLCheckKey( final String href, final String key, final String userid, final long time ) {
1261 return addURLCheckKey( href, key, userid, time, null );
1267 * 引数に指定されたhrefに対して、時間とユーザーIDを付加した暗号化文字列を
1270 * 暗号化は、org.opengion.fukurou.util.HybsCryptographyを使用します。
1271 * cryptを渡した場合はそのキーを利用して変換をかけますが、NULLの場合は標準キーで暗号化されます。
1272 * 暗号化を行う文字列のフォーマットは、[href],time=[checkTime],userid=[loginUser]です。
1274 * @og.rev 5.8.8.0 (2015/06/05) 新規作成
1276 * @param href チェック対象のURL
1277 * @param key チェックキーのパラメーターキー
1278 * @param userid ユーザーID
1280 * @param crypt 暗号化クラス
1283 * @see org.opengion.fukurou.security.HybsCryptography
1285 public static String addURLCheckKey( final String href, final String key, final String userid, final long time, final HybsCryptography crypt ) {
1286 // 6.4.2.1 (2016/02/05) PMD refactoring. Prefer StringBuffer over += for concatenating strings
1287 final String orgChKey = href + ",time=" + time + ",userid=" + userid;
1289 final String checkKey = key + "=" +
1290 crypt == null ? HYBS_CRYPTOGRAPHY.encrypt( orgChKey )
1291 : crypt.encrypt( orgChKey ) ;
1293 return addUrlEncode( href , checkKey );
1297 * Aタグの文字列を解析して、href属性にURLチェック用の暗号化文字列を付加した形で、
1300 * @og.rev 4.3.7.1 (2009/06/08) 新規追加
1301 * @og.rev 4.3.7.4 (2009/07/01) 循環参照を解消
1302 * @og.rev 5.8.8.0 (2015/06/05) キー指定対応で別メソッドに処理を委譲
1305 * @param key チェックキーのパラメーターキー
1306 * @param userid ユーザーID
1309 * @return URLチェックキーが付加されたAタグ文字列
1312 public static String embedURLCheckKey( final String tag, final String key, final String userid, final long time ) {
1313 return embedURLCheckKey( tag, key, userid, time, null );
1317 * Aタグの文字列を解析して、href属性にURLチェック用の暗号化文字列を付加した形で、
1320 * @og.rev 5.8.8.0 (2015/06/05) 新規作成
1323 * @param key チェックキーのパラメーターキー
1324 * @param userid ユーザーID
1326 * @param crypt 暗号化クラス
1328 * @return URLチェックキーが付加されたAタグ文字列
1330 public static String embedURLCheckKey( final String tag, final String key, final String userid, final long time, final HybsCryptography crypt ) {
1332 final int hrefStr = rtn.indexOf( "href=\"" );
1333 if( hrefStr >= 0 ) {
1334 final int hrefEnd = rtn.indexOf( "\"",hrefStr + 6 );
1335 if( hrefEnd >= 0 ) {
1336 String href = rtn.substring( hrefStr + 6, hrefEnd );
1337 href = XHTMLTag.addURLCheckKey( href, key, userid, time, crypt );
1338 rtn = rtn.substring( 0, hrefStr ) + "href=\"" + href + rtn.substring( hrefEnd );