2 http://shimax.cocolog-nifty.com/search/2006/09/post_b296.html
\r
3 ここで、「String.fromCharCode(13,10)」というのは、「\r\n」のことであり、Windowsの改行コードです。もちろん、「\r\n」でも良いのですが、半角円マークが出現すると、LinuxのブラウザKonquerorで正しく動作しないことがあるため、半角円マークを使わないようにしています(参照:Konquerorとエスケープ文字(JavaScript謎のエラーを解く))。
\r
6 // ------------------------------------------------------------------------- //
\r
7 // ------------ local variables -------------------------------------------- //
\r
8 // ------------------------------------------------------------------------- //
\r
9 var X_String_CRLF = String.fromCharCode( 13 ) + String.fromCharCode( 10 ), // String.fromCharCode( 13, 10 )
\r
10 X_String_CHAR_REFS = {"¡":161,"¢":162,"£":163,"¤":164,"¥":165,"¦":166,"§":167,"¨":168,"©":169,
\r
11 "ª":170,"«":171,
\r
12 "¬":172,"­":173,"®":174,"¯":175,"°":176,"±":177,"²":178,"³":179,"´":180,"µ":181,"¶":182,
\r
13 "·":183,"¸":184,"¹":185,"º":186,"»":187,"¼":188,"½":189,"¾":190,"¿":191,"À":192,
\r
14 "Á":193,"Â":194,"Ã":195,"Ä":196,"Å":197,"Æ":198,"Ç":199,"È":200,"É":201,"Ê":202,
\r
15 "Ë":203,"Ì":204,"Í":205,"Î":206,"Ï":207,"Ð":208,"Ñ":209,"Ò":210,"Ó":211,"Ô":212,
\r
16 "Õ":213,"Ö":214,"×":215,"Ø":216,"Ù":217,"Ú":218,"Û":219,"Ü":220,"Ý":221,"Þ":222,
\r
17 "ß":223,"à":224,"á":225,"â":226,"ã":227,"ä":228,"å":229,"æ":230,"ç":231,"è":232,
\r
18 "é":233,"ê":234,"ë":235,"ì":236,"í":237,"î":238,"ï":239,"ð":240,"ñ":241,"ò":242,
\r
19 "ó":243,"ô":244,"õ":245,"ö":246,"÷":247,"ø":248,"ù":249,"ú":250,"û":251,"ü":252,
\r
20 "ý":253,"þ":254,"ÿ":255,"Œ":338,"œ":339,"Š":352,"š":353,"Ÿ":376,"ˆ":710,"˜":732,"ƒ":402,
\r
21 "Α":913,"Β":914,"Γ":915,"Δ":916,"Ε":917,"Ζ":918,"Η":919,"Θ":920,"Ι":921,"Κ":922,"Λ":923,
\r
22 "Μ":924,"Ν":925,"Ξ":926,"Ο":927,"Π":928,"Ρ":929,"Σ":931,"Τ":932,"Υ":933,"Φ":934,"Χ":935,"Ψ":936,
\r
23 "Ω":937,"α":945,"β":946,"γ":947,"δ":948,"ε":949,"ζ":950,"η":951,"θ":952,"ι":953,"κ":954,
\r
24 "λ":955,"μ":956,"ν":957,"ξ":958,"ο":959,"π":960,"ρ":961,"ς":962,"σ":963,"τ":964,"υ":965,"φ":966,
\r
25 "χ":967,"ψ":968,"ω":969,"ϑ":977,"ϒ":978,"ϖ":982," ":8194," ":8195," ":8201,"‌":8204,"‍":8205,
\r
26 "‎":8206,"‏":8207,"–":8211,"—":8212,"‘":8216,"’":8217,"‚":8218,"“":8220,"”":8221,"„":8222,
\r
27 "†":8224,"‡":8225,"•":8226,"…":8230,"‰":8240,"′":8242,"″":8243,"‹":8249,"›":8250,"‾":8254,
\r
28 "⁄":8260,"€":8364,"ℑ":8465,"&ewierp;":8472,"ℜ":8476,"™":8482,"ℵ":8501,"←":8592,"↑":8593,"→":8594,
\r
29 "↓":8595,"↔":8596,"↵":8629,"⇐":8656,"⇑":8657,"⇒":8658,"⇓":8659,"⇔":8660,"∀":8704,"∂":8706,
\r
30 "∃":8707,"∅":8709,"∇":8711,"∈":8712,"∉":8713,"∋":8715,"∏":8719,"∑":8721,"−":8722,"∗":8727,
\r
31 "√":8730,"∝":8733,"∞":8734,"∠":8736,"∧":8743,"∨":8744,"∩":8745,"∪":8746,"∫":8747,"∴":8756,"∼":8764,
\r
32 "≅":8773,"≈":8776,"≠":8800,"≡":8801,"≤":8804,"≥":8805,
\r
33 "⊂":8834,"⊃":8835,"⊄":8836,"⊆":8838,"⊇":8839,"⊕":8853,"⊗":8855,"⊥":8869,"⋅":8901,
\r
34 "⌈":8968,"⌉":8969,"⌊":8970,"⌋":8971,"⟨":9001,"⟩":9002,"◊":9674,"♠":9824,"♣":9827,
\r
35 "♥":9829,"♦":9830
\r
38 // ------------------------------------------------------------------------- //
\r
39 // --- interface ----------------------------------------------------------- //
\r
40 // ------------------------------------------------------------------------- //
\r
43 * 文字列に関する関数を集めたものです。
\r
44 * @namespace X.String
\r
49 'parse' : X_String_parse,
\r
51 'cleanupWhiteSpace' : X_String_cleanupWhiteSpace,
\r
53 'whiteSpaceToTag' : X_String_whiteSpaceToTag,
\r
55 'chrReferanceTo' : X_String_chrReferanceTo,
\r
57 'toChrReferance' : X_String_toChrReferance,
\r
59 'isNumberString' : X_String_isNumberString,
\r
61 'serialize' : X_String_serialize
\r
64 // ------------------------------------------------------------------------- //
\r
65 // --- implements ---------------------------------------------------------- //
\r
66 // ------------------------------------------------------------------------- //
\r
68 * 文字列を数値、NaN,Infinity,-Infinity,bool値、null,undefinedに変換します。1e3等には未対応です。
\r
69 * @alias X.String.parse
\r
73 function X_String_parse( v ){
\r
76 if( X_Type_isString( v ) ){
\r
79 //case '{}' : return {};
\r
80 //case '[]' : return [];
\r
81 case 'NaN' : return NaN;
\r
82 case 'null' : return null;
\r
83 case 'true' : return true;
\r
84 case 'false' : return false;
\r
85 case 'Infinity' : return 1 / 0;//Number.POSITIVE_INFINITY;
\r
86 case '-Infinity' : return -1 / 0;//Number.NEGATIVE_INFINITY;
\r
89 case 'undefined' : return;
\r
91 _v = v.split( ' ' ).join( '' );
\r
92 if( X_String_isNumberString( _v ) ) return _v - 0;
\r
98 * <p>空白文字を半角スペースに変換します。\n\r,\t,\r,\n,\f,\b
\r
99 * <p>2つ以上の連続する半角スペースを一つの半角スペースにします。
\r
100 * <p>undefined, null が与えられた場合は '' を返します。
\r
101 * <p>数値,Object が与えられた場合は toString します。
\r
102 * @alias X.String.cleanupWhiteSpace
\r
106 function X_String_cleanupWhiteSpace( text ){
\r
107 var _ = ' ', __ = ' '; //, CRLF = X_String_CRLF;
\r
109 if( text == null || text === '' ) return '';
\r
111 //text.indexOf( CRLF ) !== -1 && ( text = text.split( CRLF ).join( _ ) );
\r
112 /*text.indexOf( '\n\r' ) !== -1 && ( text = text.split( '\n\r' ).join( _ ) );
\r
113 text.indexOf( '\t' ) !== -1 && ( text = text.split( '\t' ).join( _ ) );
\r
114 text.indexOf( '\r' ) !== -1 && ( text = text.split( '\r' ).join( _ ) );
\r
115 text.indexOf( '\n' ) !== -1 && ( text = text.split( '\n' ).join( _ ) );
\r
116 text.indexOf( '\f' ) !== -1 && ( text = text.split( '\f' ).join( _ ) );
\r
117 text.indexOf( '\b' ) !== -1 && ( text = text.split( '\b' ).join( _ ) ); */
\r
119 text = text.toString()
\r
120 .split( X_String_CRLF ).join( _ )
\r
121 .split( '\r' ).join( _ )
\r
122 .split( '\n' ).join( _ )
\r
123 .split( '\t' ).join( _ )
\r
124 .split( '\f' ).join( _ )
\r
125 .split( '\b' ).join( _ );
\r
128 text = text.split( __ );
\r
129 if( text.length < 2 ) return text[ 0 ];
\r
130 text = text.join( _ );
\r
135 * 空白文字列を <br> に変換します。タブを &nbsp; 4つに変換します。
\r
136 * <p>undefined, null が与えられた場合は '' を返します。
\r
137 * <p>数値,Object が与えられた場合は toString します。
\r
138 * @alias X.String.whiteSpaceToTag
\r
140 * @return {string} html文字列
\r
142 function X_String_whiteSpaceToTag( text ){
\r
143 if( text == null || text === '' ) return '';
\r
144 return text.toString()
\r
145 //.split( '\r\n\r\n' ).join( '<br>' )
\r
146 //.split( '\n\r\n\r' ).join( '<br>' )
\r
147 //.split( '\r\n' ).join( '<br>' )
\r
148 .split( X_String_CRLF ).join( '<br>' )
\r
149 .split( '\r' ).join( '<br>' )
\r
150 .split( '\n' ).join( '<br>' )
\r
151 .split( '\t' ).join( ' ' )
\r
152 .split( '\f' ).join( '' )
\r
153 .split( '\b' ).join( '' );
\r
157 * 一部の文字実体参照をデコードします。", &, <, >,
\r
158 * <p>undefined, null が与えられた場合は '' を返します。
\r
159 * <p>数値,Object が与えられた場合は toString します。
\r
160 * @alias X.String.chrReferanceTo
\r
162 * @return {string} html文字列
\r
164 function X_String_chrReferanceTo( str ){
\r
165 var refs, i, l, ref, k;
\r
167 if( str == null || str === '' ) return '';
\r
168 if( str.indexOf( '&' ) === -1 ) return str;
\r
170 str = str.toString()
\r
171 .split( '"' ).join( '"' )
\r
172 .split( ''' ).join( "'" )
\r
173 .split( '<' ).join( '<' )
\r
174 .split( '>' ).join( '>' )
\r
175 .split( ' ' ).join( ' ' );
\r
177 if( str.indexOf( '&' ) === -1 ) return str;
\r
179 refs = X_String_CHAR_REFS;
\r
181 str = str.split( k ).join( String.fromCharCode( refs[ k ] ) );
\r
184 return str.split( '&' ).join( '&' ); // last!
\r
188 * htmlタグで使われる文字を文字実体参照に変換します。", &, <, >,
\r
189 * <p>undefined, null が与えられた場合は '' を返します。
\r
190 * <p>数値,Object が与えられた場合は toString します。
\r
191 * @alias X.String.chrReferanceTo
\r
195 function X_String_toChrReferance( str ){
\r
196 if( str == null || str === '' ) return '';
\r
197 return str.toString()
\r
198 .split( '&' ).join( '&' ) // first!
\r
199 .split( '"' ).join( '"' )
\r
200 .split( "'" ).join( ''' )
\r
201 .split( '<' ).join( '<' )
\r
202 .split( '>' ).join( '>' )
\r
203 .split( ' ' ).join( ' ' );
\r
208 * @alias X.String.isNumberString
\r
210 * @return {boolean}
\r
212 function X_String_isNumberString( v ){
\r
214 return '' + n === v || '' + n === '0' + v;
\r
218 * postdata のために object を文字列に変換します。
\r
219 * https://github.com/jquery/jquery/blob/master/src/serialize.js
\r
220 * @alias X.String.serialize
\r
222 * @param {boolean} [traditional=]
\r
225 function X_String_serialize( a, traditional ) {
\r
229 // If an array was passed in, assume that it is an array of form elements.
\r
230 //if ( X_Type_isArray( a ) && false ) {
\r
231 // Serialize the form elements
\r
232 //jQuery.each( a, function() {
\r
233 // X_String_serialize_addParam( list, this.name, this.value );
\r
237 // If traditional, encode the 'old' way (the way 1.3.2 or older
\r
238 // did it), otherwise encode params recursively.
\r
239 for ( prefix in a ) {
\r
240 X_String_serialize_buildParams( list, prefix, a[ prefix ], !!traditional );
\r
244 // Return the resulting serialization
\r
245 return list.join( '&' ).split( '%20' ).join( '+' );
\r
248 function X_String_serialize_addParam( list, key, value ){
\r
249 // If value is a function, invoke it and return its value
\r
250 value = X_Type_isFunction( value ) ? value() : ( value == null ? '' : value );
\r
251 list[ list.length ] = encodeURIComponent( key ) + '=' + encodeURIComponent( value );
\r
254 function X_String_serialize_buildParams( list, prefix, obj, traditional ) {
\r
257 if ( X_Type_isArray( obj ) ) {
\r
258 // Serialize array item.
\r
259 for( i = 0, l = obj.length; i < l; ++i ){
\r
261 if ( traditional || prefix === '[]' ) {
\r
262 // Treat each array item as a scalar.
\r
263 X_String_serialize_addParam( list, prefix, v );
\r
266 // Item is non-scalar (array or object), encode its numeric index.
\r
267 X_String_serialize_buildParams(
\r
269 prefix + '[' + ( X_Type_isObject( v ) ? i : '' ) + ']',
\r
277 if ( !traditional && X_Type_isObject( obj ) ) {
\r
278 // Serialize object item.
\r
279 for ( name in obj ) {
\r
280 X_String_serialize_buildParams( list, prefix + '[' + name + ']', obj[ name ], traditional );
\r
284 // Serialize scalar item.
\r
285 X_String_serialize_addParam( list, prefix, obj );
\r