LinkElement.class.php (3078B)
1 <?php 2 3 /** 4 * Darstellung eines Verweises auf eine URL.<br> 5 * <br> 6 * Es wird nur das Verweisziel gespeichert.<br> 7 * Der verweisende Text wird nicht hier, sondern in einem der Unterelemente gespeichert. 8 * 9 * @author $Author$ 10 * @version $Revision$ 11 * @package openrat.text 12 */ 13 class LinkElement extends AbstractElement 14 { 15 var $target; 16 var $mail; 17 var $protocol = ''; 18 var $objectId = 0; 19 var $user = ''; 20 var $password = ''; 21 var $host = ''; 22 var $port = ''; 23 var $query = ''; 24 var $fragment = ''; 25 var $path = ''; 26 27 var $name; 28 29 /** 30 * Setzt das Ziel des Links.<br> 31 * Als Parameter wird eine URL erwartet. 32 * 33 * @param target Verweisziel 34 */ 35 function setTarget( $target ) 36 { 37 $this->target = $target; 38 39 $url = parse_url( $target ); 40 41 $this->protocol = @$url['scheme']; 42 $this->user = @$url['user' ]; 43 $this->password = @$url['pass' ]; 44 $this->host = @$url['host' ]; 45 $this->port = @$url['port' ]; 46 $this->path = @$url['path' ]; 47 $this->query = @$url['query' ]; 48 $this->fragment = @$url['fragment']; 49 50 if ( $this->protocol == 'object' ) 51 $this->objectId = intval($url['host']); 52 53 54 if ( $this->protocol == '' ) 55 { 56 if ( strpos($target,'@') !== false ) 57 { 58 $this->protocol = 'mailto'; 59 $this->path = $this->target; 60 } 61 62 // "..."->"123" 63 if ( intval($url['path']) > 0 ) 64 { 65 $this->protocol = 'object'; 66 $this->objectId = intval($url['path']); 67 } 68 } 69 } 70 71 72 /** 73 * Ermittelt die URL des Links. 74 */ 75 function getUrl() 76 { 77 $url = ''; 78 79 // Protokollangabe im Format <protokoll>:// 80 if ( $this->protocol != '') 81 { 82 $url .= $this->protocol.':'; 83 84 // Ausnahme: Das "mailto"-Protokoll darf keinen Doppelslash haben. 85 if ( $this->protocol != 'mailto' ) 86 $url.='//'; 87 } 88 89 // Benutzer und Kennwort anh�ngen. 90 // Format: <benutzer>:<kennwort>@ 91 if ( $this->user != '' ) 92 { 93 $url .= $this->user; 94 if ( $this->password != '' ) 95 { 96 $url .= ':'.$this->password; 97 } 98 $url .= '@'; 99 } 100 101 // Hostnamen anh�ngen. 102 $url .= $this->host; 103 104 // Port anh�ngen 105 if ( $this->port != '' ) 106 $url .= ':'.$this->port; 107 108 // Den Pfad anh�ngen. 109 $url .= $this->url_encode($this->path); 110 111 // Den Query-Teil mit einem "?" getrennt anh�ngen. 112 if ( $this->query != '' ) 113 $url .= '?'.$this->url_encode($this->query); 114 // $url .= '?'.urlencode($this->query); 115 116 // Fragment mit "#" getrennt anh�ngen. 117 if ( $this->fragment != '' ) 118 $url .= '#'.$this->url_encode($this->fragment); 119 120 return $url; 121 } 122 123 124 125 /** 126 * Hilfsfunktion f�r #url_encode(). 127 * Ein Ganzzahl-Wert wird in Hexadezimal umgewandelt. 128 */ 129 private function int2hex($intega) 130 { 131 $Ziffer = "0123456789ABCDEF"; 132 return @$Ziffer[($intega%256)/16].$Ziffer[$intega%16]; 133 } 134 135 136 137 /** 138 * Kodiert eine URL.<br> 139 * Alle Zeichen mit dem Ordinalwert >=129 werden kodiert. 140 */ 141 private function url_encode( $text ) 142 { 143 for($i=129;$i<255;$i++) 144 { 145 $in = chr($i); 146 $out = "%C3%".$this->int2hex($i-64); 147 $text = str_replace($in,$out,$text); 148 } 149 return $text; 150 } 151 } 152 153 ?>