OSDN Git Service

Cleankup. Remove redundant tabs and spaces with sed 's/[ ][ ]*$//'
[pukiwiki/pukiwiki.git] / make_link.php
1 <?php
2 /////////////////////////////////////////////////
3 // PukiWiki - Yet another WikiWikiWeb clone.
4 //
5 // $Id: make_link.php,v 1.65 2004/07/31 03:09:19 henoheno Exp $
6 //
7
8 // ¥ê¥ó¥¯¤òÉղ乤ë
9 function make_link($string,$page = '')
10 {
11         global $vars;
12         static $converter;
13
14         if (!isset($converter))
15         {
16                 $converter = new InlineConverter();
17         }
18         $_converter = $converter; // copy
19         return $_converter->convert($string, ($page != '') ? $page : $vars['page']);
20 }
21 //¥¤¥ó¥é¥¤¥óÍ×ÁǤòÃÖ´¹¤¹¤ë
22 class InlineConverter
23 {
24         var $converters; // as array()
25         var $pattern;
26         var $pos;
27         var $result;
28
29         function InlineConverter($converters=NULL,$excludes=NULL)
30         {
31                 if ($converters === NULL)
32                 {
33                         $converters = array(
34                                 'plugin',        // ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó
35                                 'note',          // Ãí¼á
36                                 'url',           // URL
37                                 'url_interwiki', // URL (interwiki definition)
38                                 'mailto',        // mailto:
39                                 'interwikiname', // InterWikiName
40                                 'autolink',      // AutoLink
41                                 'bracketname',   // BracketName
42                                 'wikiname',      // WikiName
43                                 'autolink_a',    // AutoLink(¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È)
44                         );
45                 }
46                 if ($excludes !== NULL)
47                 {
48                         $converters = array_diff($converters,$excludes);
49                 }
50                 $this->converters = array();
51                 $patterns = array();
52                 $start = 1;
53
54                 foreach ($converters as $name)
55                 {
56                         $classname = "Link_$name";
57                         $converter = new $classname($start);
58                         $pattern = $converter->get_pattern();
59                         if ($pattern === FALSE)
60                         {
61                                 continue;
62                         }
63                         $patterns[] = "(\n$pattern\n)";
64                         $this->converters[$start] = $converter;
65                         $start += $converter->get_count();
66                         $start++;
67                 }
68                 $this->pattern = join('|',$patterns);
69         }
70         function convert($string,$page)
71         {
72                 $this->page = $page;
73                 $this->result = array();
74
75                 $string = preg_replace_callback("/{$this->pattern}/x",array(&$this,'replace'),$string);
76
77                 $arr = explode("\x08",make_line_rules(htmlspecialchars($string)));
78                 $retval = '';
79                 while (count($arr))
80                 {
81                         $retval .= array_shift($arr).array_shift($this->result);
82                 }
83                 return $retval;
84         }
85         function replace($arr)
86         {
87                 $obj = $this->get_converter($arr);
88
89                 $this->result[] = ($obj !== NULL and $obj->set($arr,$this->page) !== FALSE) ?
90                         $obj->toString() : make_line_rules(htmlspecialchars($arr[0]));
91
92                 return "\x08"; //½èÍýºÑ¤ß¤ÎÉôʬ¤Ë¥Þ¡¼¥¯¤òÆþ¤ì¤ë
93         }
94         function get_objects($string,$page)
95         {
96                 preg_match_all("/{$this->pattern}/x",$string,$matches,PREG_SET_ORDER);
97
98                 $arr = array();
99                 foreach ($matches as $match)
100                 {
101                         $obj = $this->get_converter($match);
102                         if ($obj->set($match,$page) !== FALSE)
103                         {
104                                 $arr[] = $obj; // copy
105                                 if ($obj->body != '')
106                                 {
107                                         $arr = array_merge($arr,$this->get_objects($obj->body,$page));
108                                 }
109                         }
110                 }
111                 return $arr;
112         }
113         function &get_converter(&$arr)
114         {
115                 foreach (array_keys($this->converters) as $start)
116                 {
117                         if ($arr[$start] == $arr[0])
118                         {
119                                 return $this->converters[$start];
120                         }
121                 }
122                 return NULL;
123         }
124 }
125 //¥¤¥ó¥é¥¤¥óÍ×Áǽ¸¹ç¤Î¥Ù¡¼¥¹¥¯¥é¥¹
126 class Link
127 {
128         var $start;   // ³ç¸Ì¤ÎÀèƬÈÖ¹æ(0¥ª¥ê¥¸¥ó)
129         var $text;    // ¥Þ¥Ã¥Á¤·¤¿Ê¸»úÎóÁ´ÂÎ
130
131         var $type;
132         var $page;
133         var $name;
134         var $body;
135         var $alias;
136
137         // constructor
138         function Link($start)
139         {
140                 $this->start = $start;
141         }
142         // ¥Þ¥Ã¥Á¤Ë»ÈÍѤ¹¤ë¥Ñ¥¿¡¼¥ó¤òÊÖ¤¹
143         function get_pattern()
144         {
145         }
146         // »ÈÍѤ·¤Æ¤¤¤ë³ç¸Ì¤Î¿ô¤òÊÖ¤¹ ((?:...)¤ò½ü¤¯)
147         function get_count()
148         {
149         }
150         // ¥Þ¥Ã¥Á¤·¤¿¥Ñ¥¿¡¼¥ó¤òÀßÄꤹ¤ë
151         function set($arr,$page)
152         {
153         }
154         // Ê¸»úÎó¤ËÊÑ´¹¤¹¤ë
155         function toString()
156         {
157         }
158
159         //private
160         // ¥Þ¥Ã¥Á¤·¤¿ÇÛÎ󤫤顢¼«Ê¬¤ËɬÍפÊÉôʬ¤À¤±¤ò¼è¤ê½Ð¤¹
161         function splice($arr)
162         {
163                 $count = $this->get_count() + 1;
164                 $arr = array_pad(array_splice($arr,$this->start,$count),$count,'');
165                 $this->text = $arr[0];
166                 return $arr;
167         }
168         // ´ðËܥѥé¥á¡¼¥¿¤òÀßÄꤹ¤ë
169         function setParam($page,$name,$body,$type='',$alias='')
170         {
171                 static $converter = NULL;
172
173                 $this->page = $page;
174                 $this->name = $name;
175                 $this->body = $body;
176                 $this->type = $type;
177                 if ($type != 'InterWikiName' and preg_match('/\.(gif|png|jpe?g)$/i',$alias))
178                 {
179                         $alias = htmlspecialchars($alias);
180                         $alias = "<img src=\"$alias\" alt=\"$name\" />";
181                 }
182                 else if ($alias != '')
183                 {
184                         if ($converter === NULL)
185                         {
186                                 $converter = new InlineConverter(array('plugin'));
187                         }
188                         $alias = make_line_rules($converter->convert($alias,$page));
189                 }
190                 $this->alias = $alias;
191
192                 return TRUE;
193         }
194 }
195 // ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó
196 class Link_plugin extends Link
197 {
198         var $pattern;
199         var $plain,$param;
200
201         function Link_plugin($start)
202         {
203                 parent::Link($start);
204         }
205         function get_pattern()
206         {
207                 $this->pattern = <<<EOD
208 &
209 (      # (1) plain
210  (\w+) # (2) plugin name
211  (?:
212   \(
213    ((?:(?!\)[;{]).)*) # (3) parameter
214   \)
215  )?
216 )
217 EOD;
218                 return <<<EOD
219 {$this->pattern}
220 (?:
221  \{
222   ((?:(?R)|(?!};).)*) # (4) body
223  \}
224 )?
225 ;
226 EOD;
227         }
228         function get_count()
229         {
230                 return 4;
231         }
232         function set($arr,$page)
233         {
234                 list($all,$this->plain,$name,$this->param,$body) = $this->splice($arr);
235
236                 // ËÜÍè¤Î¥×¥é¥°¥¤¥ó̾¤ª¤è¤Ó¥Ñ¥é¥á¡¼¥¿¤ò¼èÆÀ¤·¤Ê¤ª¤¹ PHP4.1.2 (?R)Âкö
237                 if (preg_match("/^{$this->pattern}/x",$all,$matches)
238                         and $matches[1] != $this->plain)
239                 {
240                         list(,$this->plain,$name,$this->param) = $matches;
241                 }
242                 return parent::setParam($page,$name,$body,'plugin');
243         }
244         function toString()
245         {
246                 $body = ($this->body == '') ? '' : make_link($this->body);
247
248                 // ¥×¥é¥°¥¤¥ó¸Æ¤Ó½Ð¤·
249                 if (exist_plugin_inline($this->name))
250                 {
251                         $str = do_plugin_inline($this->name,$this->param,$body);
252                         if ($str !== FALSE) //À®¸ù
253                         {
254                                 return $str;
255                         }
256                 }
257
258                 // ¥×¥é¥°¥¤¥ó¤¬Â¸ºß¤·¤Ê¤¤¤«¡¢ÊÑ´¹¤Ë¼ºÇÔ
259                 $body = ($body == '') ? ';' : "\{$body};";
260                 return make_line_rules(htmlspecialchars('&'.$this->plain).$body);
261         }
262 }
263 // Ãí¼á
264 class Link_note extends Link
265 {
266         function Link_note($start)
267         {
268                 parent::Link($start);
269         }
270         function get_pattern()
271         {
272                 return <<<EOD
273 \(\(
274  ((?:(?R)|(?!\)\)).)*) # (1) note body
275 \)\)
276 EOD;
277         }
278         function get_count()
279         {
280                 return 1;
281         }
282         function set($arr,$page)
283         {
284                 global $foot_explain;
285                 static $note_id = 0;
286
287                 list(,$body) = $this->splice($arr);
288
289                 $id = ++$note_id;
290                 $note = make_link($body);
291
292                 $foot_explain[$id] = <<<EOD
293 <a id="notefoot_$id" href="#notetext_$id" class="note_super">*$id</a>
294 <span class="small">$note</span>
295 <br />
296 EOD;
297                 $name = "<a id=\"notetext_$id\" href=\"#notefoot_$id\" class=\"note_super\">*$id</a>";
298
299                 return parent::setParam($page,$name,$body);
300         }
301         function toString()
302         {
303                 return $this->name;
304         }
305 }
306 // url
307 class Link_url extends Link
308 {
309         function Link_url($start)
310         {
311                 parent::Link($start);
312         }
313         function get_pattern()
314         {
315                 $s1 = $this->start + 1;
316                 return <<<EOD
317 (\[\[             # (1) open bracket
318  ((?:(?!\]\]).)+) # (2) alias
319  (?:>|:)
320 )?
321 (                 # (3) url
322  (?:https?|ftp|news):\/\/[!~*'();\/?:\@&=+\$,%#\w.-]+
323 )
324 (?($s1)\]\])      # close bracket
325 EOD;
326         }
327         function get_count()
328         {
329                 return 3;
330         }
331         function set($arr,$page)
332         {
333                 list(,,$alias,$name) = $this->splice($arr);
334                 return parent::setParam($page,htmlspecialchars($name),'','url',$alias == '' ? $name : $alias);
335         }
336         function toString()
337         {
338                 return "<a href=\"{$this->name}\">{$this->alias}</a>";
339         }
340 }
341 // url (InterWiki definition type)
342 class Link_url_interwiki extends Link
343 {
344         function Link_url_interwiki($start)
345         {
346                 parent::Link($start);
347         }
348         function get_pattern()
349         {
350                 return <<<EOD
351 \[       # open bracket
352 (        # (1) url
353  (?:(?:https?|ftp|news):\/\/|\.\.?\/)[!~*'();\/?:\@&=+\$,%#\w.-]*
354 )
355 \s
356 ([^\]]+) # (2) alias
357 \]       # close bracket
358 EOD;
359         }
360         function get_count()
361         {
362                 return 2;
363         }
364         function set($arr,$page)
365         {
366                 list(,$name,$alias) = $this->splice($arr);
367                 return parent::setParam($page,htmlspecialchars($name),'','url',$alias);
368         }
369         function toString()
370         {
371                 return "<a href=\"{$this->name}\">{$this->alias}</a>";
372         }
373 }
374 //mailto:
375 class Link_mailto extends Link
376 {
377         var $is_image,$image;
378
379         function Link_mailto($start)
380         {
381                 parent::Link($start);
382         }
383         function get_pattern()
384         {
385                 $s1 = $this->start + 1;
386                 return <<<EOD
387 (?:
388  \[\[
389  ((?:(?!\]\]).)+)(?:>|:)  # (1) alias
390 )?
391 ([\w.-]+@[\w-]+\.[\w.-]+) # (2) mailto
392 (?($s1)\]\])              # close bracket if (1)
393 EOD;
394         }
395         function get_count()
396         {
397                 return 2;
398         }
399         function set($arr,$page)
400         {
401                 list(,$alias,$name) = $this->splice($arr);
402                 return parent::setParam($page,$name,'','mailto',$alias == '' ? $name : $alias);
403         }
404         function toString()
405         {
406                 return "<a href=\"mailto:{$this->name}\">{$this->alias}</a>";
407         }
408 }
409 //InterWikiName
410 class Link_interwikiname extends Link
411 {
412         var $url = '';
413         var $param = '';
414         var $anchor = '';
415
416         function Link_interwikiname($start)
417         {
418                 parent::Link($start);
419         }
420         function get_pattern()
421         {
422                 $s2 = $this->start + 2;
423                 $s5 = $this->start + 5;
424                 return <<<EOD
425 \[\[                  # open bracket
426 (?:
427  ((?:(?!\]\]).)+)>    # (1) alias
428 )?
429 (\[\[)?               # (2) open bracket
430 ((?:(?!\s|:|\]\]).)+) # (3) InterWiki
431 (?<! > | >\[\[ )      # not '>' or '>[['
432 :                     # separator
433 (                     # (4) param
434  (\[\[)?              # (5) open bracket
435  (?:(?!>|\]\]).)+
436  (?($s5)\]\])         # close bracket if (5)
437 )
438 (?($s2)\]\])          # close bracket if (2)
439 \]\]                  # close bracket
440 EOD;
441         }
442         function get_count()
443         {
444                 return 5;
445         }
446         function set($arr,$page)
447         {
448                 global $script;
449
450                 list(,$alias,,$name,$this->param) = $this->splice($arr);
451
452                 if (preg_match('/^([^#]+)(#[A-Za-z][\w-]*)$/',$this->param,$matches))
453                 {
454                         list(,$this->param,$this->anchor) = $matches;
455                 }
456                 $url = get_interwiki_url($name,$this->param);
457                 $this->url = ($url === FALSE) ?
458                         $script.'?'.rawurlencode('[['.$name.':'.$this->param.']]') :
459                         htmlspecialchars($url);
460
461                 return parent::setParam(
462                         $page,
463                         htmlspecialchars($name.':'.$this->param),
464                         '',
465                         'InterWikiName',
466                         $alias == '' ? $name.':'.$this->param : $alias
467                 );
468         }
469         function toString()
470         {
471                 return "<a href=\"{$this->url}{$this->anchor}\" title=\"{$this->name}\">{$this->alias}</a>";
472         }
473 }
474 // BracketName
475 class Link_bracketname extends Link
476 {
477         var $anchor,$refer;
478
479         function Link_bracketname($start)
480         {
481                 parent::Link($start);
482         }
483         function get_pattern()
484         {
485                 global $WikiName,$BracketName;
486
487                 $s2 = $this->start + 2;
488                 return <<<EOD
489 \[\[                     # open bracket
490 (?:((?:(?!\]\]).)+)>)?   # (1) alias
491 (\[\[)?                  # (2) open bracket
492 (                        # (3) PageName
493  (?:$WikiName)
494  |
495  (?:$BracketName)
496 )?
497 (\#(?:[a-zA-Z][\w-]*)?)? # (4) anchor
498 (?($s2)\]\])             # close bracket if (2)
499 \]\]                     # close bracket
500 EOD;
501         }
502         function get_count()
503         {
504                 return 4;
505         }
506         function set($arr,$page)
507         {
508                 global $WikiName;
509
510                 list(,$alias,,$name,$this->anchor) = $this->splice($arr);
511
512                 if ($name == '' and $this->anchor == '')
513                 {
514                         return FALSE;
515                 }
516                 if ($name != '' and preg_match("/^$WikiName$/",$name))
517                 {
518                         return parent::setParam($page,$name,'','pagename',$alias);
519                 }
520                 if ($alias == '')
521                 {
522                         $alias = $name.$this->anchor;
523                 }
524                 if ($name == '')
525                 {
526                         if ($this->anchor == '')
527                         {
528                                 return FALSE;
529                         }
530                 }
531                 else
532                 {
533                         $name = get_fullname($name,$page);
534                         if (!is_pagename($name))
535                         {
536                                 return FALSE;
537                         }
538                 }
539                 return parent::setParam($page,$name,'','pagename',$alias);
540         }
541         function toString()
542         {
543                 return make_pagelink(
544                         $this->name,
545                         $this->alias,
546                         $this->anchor,
547                         $this->page
548                 );
549         }
550 }
551 // WikiName
552 class Link_wikiname extends Link
553 {
554         function Link_wikiname($start)
555         {
556                 parent::Link($start);
557         }
558         function get_pattern()
559         {
560                 global $WikiName,$nowikiname;
561
562                 return $nowikiname ? FALSE : "($WikiName)";
563         }
564         function get_count()
565         {
566                 return 1;
567         }
568         function set($arr,$page)
569         {
570                 list($name) = $this->splice($arr);
571                 return parent::setParam($page,$name,'','pagename',$name);
572         }
573         function toString()
574         {
575                 return make_pagelink(
576                         $this->name,
577                         $this->alias,
578                         '',
579                         $this->page
580                 );
581         }
582 }
583 // AutoLink
584 class Link_autolink extends Link
585 {
586         var $forceignorepages = array();
587         var $auto;
588         var $auto_a; // alphabet only
589
590         function Link_autolink($start)
591         {
592                 global $autolink;
593
594                 parent::Link($start);
595
596                 if (!$autolink or !file_exists(CACHE_DIR.'autolink.dat'))
597                 {
598                         return;
599                 }
600                 @list($auto,$auto_a,$forceignorepages) = file(CACHE_DIR.'autolink.dat');
601                 $this->auto = $auto;
602                 $this->auto_a = $auto_a;
603                 $this->forceignorepages = explode("\t",trim($forceignorepages));
604         }
605         function get_pattern()
606         {
607                 return isset($this->auto) ? "({$this->auto})" : FALSE;
608         }
609         function get_count()
610         {
611                 return 1;
612         }
613         function set($arr,$page)
614         {
615                 global $WikiName;
616
617                 list($name) = $this->splice($arr);
618                 // Ìµ»ë¥ê¥¹¥È¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¡¢¤¢¤ë¤¤¤Ï¸ºß¤·¤Ê¤¤¥Ú¡¼¥¸¤ò¼Î¤Æ¤ë
619                 if (in_array($name,$this->forceignorepages) or !is_page($name))
620                 {
621                         return FALSE;
622                 }
623                 return parent::setParam($page,$name,'','pagename',$name);
624         }
625         function toString()
626         {
627                 return make_pagelink(
628                         $this->name,
629                         $this->alias,
630                         '',
631                         $this->page
632                 );
633         }
634 }
635 class Link_autolink_a extends Link_autolink
636 {
637         function Link_autolink_a($start)
638         {
639                 parent::Link_autolink($start);
640         }
641         function get_pattern()
642         {
643                 return isset($this->auto_a) ? "({$this->auto_a})" : FALSE;
644         }
645 }
646
647 // ¥Ú¡¼¥¸Ì¾¤Î¥ê¥ó¥¯¤òºîÀ®
648 function make_pagelink($page,$alias='',$anchor='',$refer='')
649 {
650         global $script,$vars,$show_title,$show_passage,$link_compact,$related;
651         global $_symbol_noexists;
652
653         $s_page = htmlspecialchars(strip_bracket($page));
654         $s_alias = ($alias == '') ? $s_page : $alias;
655
656         if ($page == '')
657         {
658                 return "<a href=\"$anchor\">$s_alias</a>";
659         }
660
661         $r_page = rawurlencode($page);
662         $r_refer = ($refer == '') ? '' : '&amp;refer='.rawurlencode($refer);
663
664         if (!array_key_exists($page,$related) and $page != $vars['page'] and is_page($page))
665         {
666                 $related[$page] = get_filetime($page);
667         }
668
669         if (is_page($page))
670         {
671                 $passage = get_pg_passage($page,FALSE);
672                 $title = $link_compact ? '' : " title=\"$s_page$passage\"";
673                 return "<a href=\"$script?$r_page$anchor\"$title>$s_alias</a>";
674         }
675         else
676         {
677                 $retval = "$s_alias<a href=\"$script?cmd=edit&amp;page=$r_page$r_refer\">$_symbol_noexists</a>";
678                 if (!$link_compact)
679                 {
680                         $retval = "<span class=\"noexists\">$retval</span>";
681                 }
682                 return $retval;
683         }
684 }
685 // ÁêÂл²¾È¤òŸ³«
686 function get_fullname($name,$refer)
687 {
688         global $defaultpage;
689
690         if ($name == '')
691         {
692                 return $refer;
693         }
694
695         if ($name{0} == '/')
696         {
697                 $name = substr($name,1);
698                 return ($name == '') ? $defaultpage : $name;
699         }
700
701         if ($name == './')
702         {
703                 return $refer;
704         }
705
706         if (substr($name,0,2) == './')
707         {
708                 $arrn = preg_split('/\//',$name,-1,PREG_SPLIT_NO_EMPTY);
709                 $arrn[0] = $refer;
710                 return join('/',$arrn);
711         }
712
713         if (substr($name,0,3) == '../')
714         {
715                 $arrn = preg_split('/\//',$name,-1,PREG_SPLIT_NO_EMPTY);
716                 $arrp = preg_split('/\//',$refer,-1,PREG_SPLIT_NO_EMPTY);
717
718                 while (count($arrn) > 0 and $arrn[0] == '..')
719                 {
720                         array_shift($arrn);
721                         array_pop($arrp);
722                 }
723                 $name = count($arrp) ? join('/',array_merge($arrp,$arrn)) :
724                         (count($arrn) ? "$defaultpage/".join('/',$arrn) : $defaultpage);
725         }
726         return $name;
727 }
728
729 // InterWikiName¤òŸ³«
730 function get_interwiki_url($name,$param)
731 {
732         global $WikiName,$interwiki;
733         static $interwikinames;
734         static $encode_aliases = array('sjis'=>'SJIS','euc'=>'EUC-JP','utf8'=>'UTF-8');
735
736         if (!isset($interwikinames))
737         {
738                 $interwikinames = array();
739                 foreach (get_source($interwiki) as $line)
740                 {
741                         if (preg_match('/\[((?:(?:https?|ftp|news):\/\/|\.\.?\/)[!~*\'();\/?:\@&=+\$,%#\w.-]*)\s([^\]]+)\]\s?([^\s]*)/',$line,$matches))
742                         {
743                                 $interwikinames[$matches[2]] = array($matches[1],$matches[3]);
744                         }
745                 }
746         }
747         if (!array_key_exists($name,$interwikinames))
748         {
749                 return FALSE;
750         }
751         list($url,$opt) = $interwikinames[$name];
752
753         // Ê¸»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°
754         switch ($opt)
755         {
756                 // YukiWiki·Ï
757                 case 'yw':
758                         if (!preg_match("/$WikiName/",$param))
759                         {
760                                 $param = '[['.mb_convert_encoding($param,'SJIS',SOURCE_ENCODING).']]';
761                         }
762 //                      $param = htmlspecialchars($param);
763                         break;
764
765                 // moin·Ï
766                 case 'moin':
767                         $param = str_replace('%','_',rawurlencode($param));
768                         break;
769
770                 // ÆâÉôʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Î¤Þ¤ÞURL¥¨¥ó¥³¡¼¥É
771                 case '':
772                 case 'std':
773                         $param = rawurlencode($param);
774                         break;
775
776                 // URL¥¨¥ó¥³¡¼¥É¤·¤Ê¤¤
777                 case 'asis':
778                 case 'raw':
779 //                      $param = htmlspecialchars($param);
780                         break;
781
782                 default:
783                         // ¥¨¥¤¥ê¥¢¥¹¤ÎÊÑ´¹
784                         if (array_key_exists($opt,$encode_aliases))
785                         {
786                                 $opt = $encode_aliases[$opt];
787                         }
788                         // »ØÄꤵ¤ì¤¿Ê¸»ú¥³¡¼¥É¤Ø¥¨¥ó¥³¡¼¥É¤·¤ÆURL¥¨¥ó¥³¡¼¥É
789                         $param = rawurlencode(mb_convert_encoding($param,$opt,'auto'));
790         }
791
792         // ¥Ñ¥é¥á¡¼¥¿¤òÃÖ´¹
793         if (strpos($url,'$1') !== FALSE)
794         {
795                 $url = str_replace('$1',$param,$url);
796         }
797         else
798         {
799                 $url .= $param;
800         }
801
802         return $url;
803 }
804 ?>