Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Doppelpunkt bricht Inhalt ab

Mitglied: NetworkingHomer

NetworkingHomer (Level 1) - Jetzt verbinden

03.09.2013 um 12:28 Uhr, 2162 Aufrufe, 19 Kommentare

Hallo!
Wenn ein User in seinen Termin-Text einen Doppelpunkt einbaut, z.b.:

"Folgendes: Bla bla..."

wird der Text ab "Folgendes" abgeschnitten.

Woran kann das grundsätzlich in PHP und HTML liegen? Umlaute werden korrekt angezeigt.

Liebe Grüße
Homer
Mitglied: Hitman4021
03.09.2013 um 12:31 Uhr
Hallo,

Wenn ein User in seinen Termin-Text einen Doppelpunkt einbaut, z.b.:
"Folgendes: Bla bla..."
wird der Text ab "Folgendes" abgeschnitten.
Und wie sieht das Script dazu aus?
Wird es bereits bei der Eingabe falsch angezeigt?
Datenbank?
JavaScript?

Umlaute werden korrekt angezeigt
Ok dein Character Set stimmt schon mal.

Gruß
Bitte warten ..
Mitglied: certifiedit.net
03.09.2013 um 12:38 Uhr
Skript? Nicht sauber escaped?
Bitte warten ..
Mitglied: NetworkingHomer
03.09.2013 um 12:39 Uhr
Moin,

das ist ein PHP-Script, es liest einen iCal-Link. In der Eingabe (im Kalender) wird es korrekt angezeigt. Der ICal-Export geht auch, da der Termin in Outlook korrekt angezeigt wird. Einze Zeile, die das verursacht, sieht z.B. so aus:

$nc .= "" . $event->description . "";

Es wird dann später mit print angezeigt.

Liebe Güße
Homer
Bitte warten ..
Mitglied: certifiedit.net
03.09.2013 um 12:41 Uhr
Wenn du Hilfe willst gib uns >>vollständige<< Informationen. D.h. das komplette Skriptabriss. Andernfalls lässt sich das Problem schwer herleiten.

aus einem $var = $x->y wird man bei keinem 5 Zeilen Problemskript schlau.
Bitte warten ..
Mitglied: NetworkingHomer
03.09.2013, aktualisiert um 14:20 Uhr
Okay.
01.
<?php
02.
/* iCal Parser - Some PHP functions to parse an iCal calendar into a usable PHP object.
03.
 *               Also convert the object into pretty HTML.
04.
 *
05.
 * Copyright (C) 2006 Adam Wolfe Gordon
06.
 *
07.
 * This program is free software; you can redistribute it and/or
08.
 * modify it under the terms of the GNU General Public License
09.
 * as published by the Free Software Foundation; either version 2
10.
 * of the License, or (at your option) any later version.
11.
 *
12.
 * This program is distributed in the hope that it will be useful,
13.
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14.
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15.
 * GNU General Public License for more details.
16.
 *
17.
 * You should have received a copy of the GNU General Public License
18.
 * along with this program; if not, write to the Free Software
19.
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20.
 */
21.

22.
// Blatantly stolen from http://ca3.php.net/manual/en/function.xml-parse-into-struct.php
23.
// Convert xml into a nice object
24.
class XmlElement {
25.
  var $name;
26.
  var $attributes;
27.
  var $content;
28.
  var $children;
29.
};
30.

31.
function xml_to_object($xml) {
32.
  $parser = xml_parser_create();
33.
  xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
34.
  xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
35.
  xml_parse_into_struct($parser, $xml, $tags);
36.
  xml_parser_free($parser);
37.
  
38.
  $elements = array();  // the currently filling [child] XmlElement array
39.
  $stack = array();
40.
  foreach ($tags as $tag) {
41.
    $index = count($elements);
42.
    if ($tag['type'] == "complete" || $tag['type'] == "open") {
43.
      $elements[$index] = new XmlElement;
44.
      $elements[$index]->name = $tag['tag'];
45.
      $elements[$index]->attributes = $tag['attributes'];
46.
      $elements[$index]->content = $tag['value'];
47.
      if ($tag['type'] == "open") {  // push
48.
	$elements[$index]->children = array();
49.
	$stack[count($stack)] = &$elements;
50.
	$elements = &$elements[$index]->children;
51.
      }
52.
    }
53.
    if ($tag['type'] == "close") {  // pop
54.
      $elements = &$stack[count($stack) - 1];
55.
      unset($stack[count($stack) - 1]);
56.
    }
57.
  }
58.
  return $elements[0];  // the single top-level element
59.
}
60.

61.
// Not stolen
62.
// Fetch text from an iCal URL and convert it into xml
63.
function ical2xml($URL) {
64.
  $myfile = file_get_contents($URL);
65.
  
66.
  $myfile = str_replace("\n ", "", $myfile);
67.
  $myfile = str_replace("&", " and ", $myfile);
68.
  $mylines = split("\n", $myfile);
69.
  
70.
  $xml = "";	
71.
  foreach($mylines as $line) {
72.
    if($line == "")
73.
      continue;
74.
    
75.
    list($key,$val) = split(":", $line);
76.
    $key = trim($key, "\r\n");
77.
    $val = trim($val, "\r\n");
78.
    $val = str_replace("\n", "", $val);
79.
    $val = str_replace("\r", "", $val);
80.
    
81.
    $attribs = split(";", $key);
82.
    $key = $attribs[0];
83.
    $attribs = array_slice($attribs, 1);
84.
    
85.
    $myattribs = " ";
86.
    foreach($attribs as $attrib) {
87.
      list($att, $attval) = split("=", $attrib);
88.
      $myattribs .= "$att=\"$attval\" ";
89.
    }
90.
    $myattribs = rtrim($myattribs);
91.
    
92.
    // BEGIN and END keywords
93.
    if($key == 'BEGIN') {
94.
      $xml .= "<$val$myattribs>\n";
95.
    } else if($key == 'END') {
96.
      $xml .= "</$val>\n";
97.
    } else {
98.
      $xml .= "<$key$myattribs>$val</$key>\n";
99.
    }
100.
  }
101.
  
102.
  return $xml;
103.
}
104.

105.
// Event class
106.
class event {
107.
  var $starttime;
108.
  var $endtime;
109.
  var $allday;
110.
  var $rrulefreq;
111.
  var $rruledays;
112.
  var $rruleuntil;
113.
  var $description;
114.
  var $location;
115.
  var $summary;
116.
};
117.

118.
// Calendar class
119.
class calendar {
120.
  var $name;
121.
  var $timezone;
122.
  var $description;
123.
  var $events = array();
124.
};
125.

126.
// Timezone class
127.
class timezone {
128.
  var $namestd;
129.
  var $namedst;
130.
  var $offsetstd;
131.
  var $offsetdst;
132.
};
133.

134.
// Convert a time in iCal's ugly format to a unix timestamp
135.
function ical_time_to_timestamp($time) {
136.
  $hour = substr($time, 9, 2);
137.
  if($hour == "")
138.
    $hour = 0;
139.
  $min = substr($time, 11, 2);
140.
  if($min == "")
141.
    $min = 0;
142.
  $sec =  substr($time, 13, 2);
143.
  if($sec == "")
144.
    $sec = 0;
145.
  $mon = substr($time, 4, 2);
146.
  $day = substr($time, 6, 2);
147.
  $year = substr($time, 0, 4);
148.
  return mktime($hour, $min, $sec, $mon, $day, $year);
149.
}
150.

151.
// The day the world ends (for Unix users)
152.
$endoftime = ical_time_to_timestamp("20380118T000000");
153.

154.
// Event comparison function for sorting
155.
function cmp($a, $b) {
156.
  if(!(is_object($a) && is_object($b)))
157.
    return 0;
158.
  if($a->starttime == $b->starttime)
159.
    return 0;
160.
  return ($a->starttime < $b->starttime) ? -1 : 1;
161.
}
162.

163.
// Convert XML into a calendar object
164.
function xml_to_calendar($xml) {
165.
  $mycal = new calendar;
166.
  $eventcount = 0;
167.
  
168.
  $thecal = xml_to_object($xml);
169.
  
170.
  foreach($thecal->children as $child) {
171.
    switch($child->name) {
172.
    case "X-WR-CALNAME":
173.
      $mycal->name = $child->content;
174.
      break;
175.
    case "X-WR-CALDESC":
176.
      $mycal->description = $child->content;
177.
      break;
178.
    case "VTIMEZONE":
179.
      $mycal->timezone = new timezone;
180.
      foreach($child->children as $data) {
181.
	switch($data->name) {
182.
	case "STANDARD":
183.
	  foreach($data->children as $sec) {
184.
	    switch($sec->name) {
185.
	    case "TZNAME":
186.
	      $mycal->timezone->namestd = $sec->content;
187.
	      break;
188.
	    case "TZOFFSETTO":
189.
	      $mycal->timezone->offsetstd = $sec->content;
190.
	      break;
191.
	    default:
192.
	      break;
193.
	    }
194.
	  }
195.
	  break;
196.
	case "DAYLIGHT":
197.
	  foreach($data->children as $sec) {
198.
	    switch($sec->name) {
199.
	    case "TZNAME":
200.
	      $mycal->timezone->namedst = $sec->content;
201.
	      break;
202.
	    case "TZOFFSETTO":
203.
	      $mycal->timezone->offsetdst = $sec->content;
204.
	      break;
205.
	    default:
206.
	      break;
207.
	    }
208.
	  }
209.
	  break;
210.
	default:
211.
	  break;
212.
	}
213.
      }
214.
      break;
215.
    case "VEVENT":
216.
      $i = $eventcount;
217.
      $mycal->events[$i] = new event;
218.
      $mycal->events[$i]->allday = FALSE;
219.
      $eventcount++;
220.
      foreach($child->children as $data) {
221.
	switch($data->name) {
222.
	case "DTSTART":
223.
	  if(substr($data->content, 9, 6) == "") {
224.
	    $mycal->events[$i]->allday = TRUE;
225.
	    $mycal->events[$i]->starttime = ical_time_to_timestamp($data->content . "T000000");
226.
	  } else
227.
	    $mycal->events[$i]->starttime = ical_time_to_timestamp($data->content);
228.
	  break;
229.
	case "DTEND":
230.
	  if(substr($data->content, 9, 6) == "") {
231.
	    $mycal->events[$i]->allday = TRUE;
232.
	    $mycal->events[$i]->endtime = ical_time_to_timestamp($data->content . "T000000");
233.
	  } else
234.
	    $mycal->events[$i]->endtime = ical_time_to_timestamp($data->content);
235.
	  break;
236.
	case "DURATION":
237.
	  $mycal->events[$i]->endtime = $mycal->events[$i]->starttime + substr($data->content, 2, strlen($data->content) - 1);
238.
	  break;
239.
	case "RRULE":
240.
	  $myrrule = split(";", $data->content);
241.
	  // Unless otherwise specified, repeating events go until the end of time
242.
	  $mycal->events[$i]->rruleuntil = $endoftime;
243.
	  foreach($myrrule as $part) {
244.
	    list($a, $b) = split("=", $part);
245.
	    switch($a) {
246.
	    case "FREQ":
247.
	      $mycal->events[$i]->rrulefreq = $b;
248.
	      break;
249.
	    case "BYDAY":
250.
	      $mycal->events[$i]->rruledays = $b;
251.
	      break;
252.
	    case "UNTIL":
253.
	      $mycal->events[$i]->rruleuntil = ical_time_to_timestamp($b);
254.
	      break;
255.
	    default:
256.
	      break;
257.
	    }
258.
	  }
259.
	  break;
260.
	case "DESCRIPTION":
261.
          $mycal->events[$i]->description = str_replace("\\n", "<br />", $data->content);
262.
	  break;
263.
	case "LOCATION":
264.
	  $mycal->events[$i]->location = $data->content;
265.
	  break;
266.
	case "SUMMARY":
267.
	  $mycal->events[$i]->summary = $data->content;
268.
	  break;
269.
	default:
270.
	  break;
271.
	}
272.
      }
273.
      break;
274.
    default:
275.
      break;
276.
    }
277.
  }
278.

279.
  // Sort events by start date/time
280.
  usort($mycal->events, "cmp");
281.
  
282.
  return $mycal;
283.
}
284.

285.
// Take in an iCal object and spit out pretty HTML.
286.
function objToHTML($thecal) {
287.
  // Days of the week
288.
  $shortdays = array(	"MO"=>"Monday",
289.
			"TU"=>"Tuesday",
290.
			"WE"=>"Wednesday",
291.
			"TH"=>"Thursday",
292.
			"FR"=>"Friday",
293.
			"SA"=>"Saturday",
294.
			"SU"=>"Sunday"
295.
			);
296.

297.
  // Global variables from the config file
298.
  global $timeformat;
299.
  global $dateformat;
300.
  global $noyearformat;
301.
  global $nodayformat;
302.
  global $xthday;
303.

304.
  $nc = "<ul>";
305.
  foreach($thecal->events as $event) {
306.
    if($event->starttime > time() || ($event->rrulefreq && (time() < $event->rruleuntil || $event->rruleuntil == $endoftime))) {
307.
      $nc .= "<li><b>" . $event->summary . "</b><br />\n";
308.
      
309.
      if($event->rrulefreq == "WEEKLY") {
310.
	$days = str_replace(",", ", ", $event->rruledays);
311.
	$repdays = split(",", $event->rruledays);
312.
	foreach($repdays as $repday) {
313.
	  $days = str_replace($repday, $shortdays[$repday], $days);
314.
	}
315.
	
316.
	$prefix = "Every week on $days";
317.
	
318.
	if($event->starttime > time()) {
319.
	  if($event->allday == FALSE) {
320.
	    $fromto = " starting " . date($dateformat, $event->starttime) . " from " . date($timeformat, $event->starttime) . " to " . date($timeformat, $event->endtime);
321.
	  } else {
322.
	    $fromto = " all day starting " . date($dateformat, $event->starttime);
323.
	  }
324.
	} else {
325.
	  if($event->allday == FALSE) {
326.
	    $fromto = " from " . date($timeformat, $event->starttime) . " to " . date($timeformat, $event->endtime);
327.
	  } else {
328.
	    $fromto = ", all day";
329.
	  }
330.
	}
331.
	
332.
	if($event->rruleuntil != $endoftime) {
333.
	  $until = " until " . date($dateformat, $event->rruleuntil);
334.
	} else {
335.
	  $until = "";
336.
	}
337.
      } else if($event->rrulefreq == "MONTHLY") {
338.
	$prefix = "The " . date($xthday, $event->starttime) . " day of each month";
339.
	
340.
	if($event->starttime > time()) {
341.
	  if($event->allday == FALSE) {
342.
	    $fromto = " starting " . date($nodayformat, $event->starttime) . " from " . date($timeformat, $event->starttime) . " to " . date($timeformat, $event->endtime);
343.
	  } else {
344.
	    $fromto = " starting " . date($nodayformat, $event->starttime);
345.
	  }
346.
	} else {
347.
	  if($event->allday == FALSE) {
348.
	    $fromto = " from " . date($timeformat, $event->starttime) . " to " . date($timeformat, $event->endtime);
349.
	  } else {
350.
	    $fromto = ", all day";
351.
	  }
352.
	}
353.
	
354.
	if($event->rruleuntil != $endoftime) {
355.
	  $until = " until " . date($nodayformat, $event->rruleuntil);
356.
	} else {
357.
	  $until = "";
358.
	}
359.
      } else if($event->rrulefreq == "DAILY") {
360.
	$prefix = "Every day";
361.
	
362.
	if($event->starttime > time()) {
363.
	  if($event->allday == FALSE) {
364.
	    $fromto = " starting " . date($dateformat, $event->starttime) . " from " . date($timeformat, $event->starttime) . " to " . date($timeformat, $event->endtime);
365.
	  } else {
366.
	    $fromto = " all day starting " . date($dateformat, $event->starttime);
367.
	  }
368.
	} else {
369.
	  if($event->allday == FALSE) {
370.
	    $fromto = " from " . date($timeformat, $event->starttime) . " to " . date($timeformat, $event->endtime);
371.
	  } else {
372.
	    $fromto = " all day";
373.
	  }
374.
	}
375.
	
376.
	if($event->rruleuntil != $endoftime) {
377.
	  $until = " until " . date($dateformat, $event->rruleuntil);
378.
	} else {
379.
	  $until = "";
380.
	}
381.
      } else if($event->rrulefreq == "YEARLY") {
382.
	$prefix = "Annually on " . date($noyearformat, $event->starttime);
383.
	
384.
	if($event->allday == FALSE) {
385.
	  $fromto = " from " . date($timeformat, $event->starttime) . " to " . date($timeformat, $event->endtime);
386.
	} else {
387.
	  $fromto = ", all day";
388.
	}
389.
	
390.
	if($event->rruleuntil != $endoftime) {
391.
	  $until = " until " . date("Y", $event->rruleuntil);
392.
	} else {
393.
	  $until = "";
394.
	}
395.
      } else {
396.
	$prefix = date($dateformat, $event->starttime);
397.
	
398.
	if($event->allday == FALSE) {
399.
	  $fromto = " from " . date($timeformat, $event->starttime) . " to " . date($timeformat, $event->endtime);
400.
	} else {
401.
	  $fromto = " all day";
402.
	}
403.
	
404.
	$until = "";
405.
      }
406.
      
407.
      $nc .= $prefix . $fromto . $until . "<br />\n";
408.
      
409.
      if($event->location)
410.
	$nc .= $event->location . "<br />\n";
411.
      $nc .= "<blockquote>" . $event->description . "</blockquote><br /></li>\n";
412.
    }
413.
  }
414.
  $nc .= "</ul>";
415.

416.
  return $nc;
417.
}
418.
?>
Bitte warten ..
Mitglied: NetworkingHomer
03.09.2013 um 12:49 Uhr
Das ist aber nur der Auszug aus der engine/iCalParser.php
Es gibt natürlich noch andere Dateien. Man sich das Script komplett hier herunter laden:

http://www.xvx.ca/code/icalevents/iCalEvents-0.31-standalone.tar.gz
Bitte warten ..
Mitglied: nxclass
03.09.2013, aktualisiert um 13:00 Uhr
01.
var_dump( $event->description );
02.
$nc .= "" . $event->description . "";
... prüfe mal ob der Inhalt an dieser Stelle noch "richtig" ist.

oft werden : für Platzhalter verwendet für Ersetzungen vorzunehmen oder später Parameter zu übergeben.

EDIT: schau mal da:
01.
list($key,$val) = split(":", $line);
Bitte warten ..
Mitglied: colinardo
03.09.2013 um 12:57 Uhr
Hi Homer,
diese Zeile im Code ist verdächtig:
list($key,$val) = split(":", $line);
da werden Zeilen mit einem Doppelpunkt gesplittet

Grüße Uwe
Bitte warten ..
Mitglied: NetworkingHomer
03.09.2013 um 13:02 Uhr
Heiße Spur! Danke! Ich schaus mir sofort an - aber erst mal Tasse Kaffe machen
Bitte warten ..
Mitglied: NetworkingHomer
03.09.2013 um 13:13 Uhr
Okay, das wird wohl die Ursach sein.
Aber wie Abhilfe schaffen? Schaut so aus, als hätte der Autor das nicht ohne Grund gemacht. Hat wer eine Idee?
Bitte warten ..
Mitglied: NetworkingHomer
03.09.2013 um 13:16 Uhr
Vielleicht die ":" vorher herausfiltern und ersetzen?
Bitte warten ..
Mitglied: colinardo
03.09.2013 um 13:19 Uhr
Zitat von NetworkingHomer:
Vielleicht die ":" vorher herausfiltern und ersetzen?
Das wird nicht gehen denn ein iCal-File trennt die Felder mit einem Doppelpunkt voneinander. Du müsstest vor dem parsen in dem File mit einer Regular Expression die jeweilige Description des Termins ausfiltern und "nur" dort den Doppelpunkt ersetzen.
Bitte warten ..
Mitglied: NetworkingHomer
03.09.2013, aktualisiert um 14:20 Uhr
Moin Colinardo!
Du hast recht! ":" geht nicht, aber ": " schon!

Yuhu! Es geht! Edit: Die Zeilen
01.
  $myfile1 = file_get_contents($URL); (nur $myfile geändert)
02.
  $myfile = (str_replace(": ","P", $myfile1)); (neu hinzugefügt)
Stammen von mir:
01.
function ical2xml($URL) {
02.
  $myfile1 = file_get_contents($URL);
03.
  $myfile = (str_replace(": ","P", $myfile1));
04.
  $myfile = str_replace("\n ", "", $myfile);
05.
  $myfile = str_replace("\n ", "", $myfile);
06.
  $myfile = str_replace("&", " and ", $myfile);
07.
  $mylines = split("\n", $myfile);
Jetzt gehts. Danke! Selten so schnell in einem Forum einen Erfolg erzielt. Danke!!!!

Liebe Grüße

Homer
Bitte warten ..
Mitglied: NetworkingHomer
03.09.2013 um 13:32 Uhr
Okay, ein Wehrmutstropfen: Der User muss nach dem Doppelpunkt auch ein Leerzeichen eigeben. Das ist natürlich nicht so gut.
Bitte warten ..
Mitglied: colinardo
03.09.2013, aktualisiert 04.09.2013
Okay, ein Wehrmutstropfen: Der User muss nach dem Doppelpunkt auch ein Leerzeichen eigeben. Das ist natürlich nicht so gut.
Du könntest wie ich oben schon geschrieben habe das iCal-File vorher "impfen" und den Doppelpunkt nur an den jeweiligen Stellen ersetzen (in diesem Fall durch ein Leerzeichen):

Beispiel:
01.
$path_ical = 'test.ical';
02.
$content = file_get_contents($path_ical);
03.
$lines = preg_split('/END:/',$content);
04.
$newLineArray = preg_replace('/SUMMARY:([^\n]*)(:)([^\n]*)/s','SUMMARY:$1 $3',$lines);
05.

06.
for ($i = 0; $i < count($newLineArray); $i++){
07.
	$newContent .= $newLineArray[$i] . " END:";	
08.
}
09.
file_put_contents($path_ical,$newContent);
Grüße Uwe
Bitte warten ..
Mitglied: NetworkingHomer
04.09.2013, aktualisiert um 21:46 Uhr
Moin Uwe,

habe versucht, deinen Teil einzubauen, aber er zeigt keine Wirkung. Hab ich das richtig gemacht?
01.
function ical2xml($URL) {
02.

03.

04.
$path_ical = 'test.ical';
05.
$content = file_get_contents($URL);
06.
$lines = preg_split('/END:/',$content);
07.
$newLineArray = preg_replace('/SUMMARY:([^\n]*)(:)([^\n]*)/s','SUMMARY:$1 $3',$lines);
08.

09.
for ($i = 0; $i < count($newLineArray); $i++){
10.
        $newContent .= $newLineArray[$i] . " END:";
11.
}
12.
file_put_contents($path_ical,$newContent);
13.

14.
$myfile .= $newContent;
15.

16.
var_dump($myfile);
17.

18.
  $myfile = str_replace("\n ", "", $myfile);
19.
  $myfile = str_replace("&", " and ", $myfile);
20.
  $mylines = split("\n", $myfile);
21.
Viele Grüße

Homer
Bitte warten ..
Mitglied: NetworkingHomer
05.09.2013 um 06:30 Uhr
Ah, ich glaube, ich muss nich nach
SUMMARY
sondern nach
DESCRIPTION
suchen. Probiere ich nachher mal aus.
Bitte warten ..
Mitglied: colinardo
05.09.2013, aktualisiert um 10:15 Uhr
Hallo Homer,
so sollte es eigentlich funktionieren(bei mir erfolgreich getestet), kommt aber drauf an wie du es weiterverarbeitest. Die Funktion liefert den originalen Inhalt des ical-Files reduziert um die Doppelpunkte im SUMMARY-Field zurück
01.
function cleanICAL($URL) {
02.
  $content = file_get_contents($URL);
03.
  $content = preg_replace('/\n/', "", $content);
04.
  $lines = preg_split('/END:/',$content);
05.
  $newLineArray = preg_replace('/SUMMARY:([^\n]*)(:)([^\n]*)/s','SUMMARY:$1 $3',$lines);
06.
  $newLineArray = preg_replace('/DESCRIPTION:([^\n]*)(:)([^\n]*)SUMMARY:/s','DESCRIPTION:$1 $3SUMMARY:',$newLineArray);
07.

08.
  for ($i = 0; $i < count($newLineArray); $i++){
09.
          $newContent .= $newLineArray[$i] . " END:";
10.
  }
11.
  var_dump($newContent);
12.
  return $newContent;
13.
}
also machst du dann den Aufruf wie folgt:
01.
$newICALContent = cleanICAL("http://www.ichbineineurl.de/test.ical");
danach gibst du die Variable $newICALContent an die eigentliche Funktion die daraus ein XML-File macht. Oder du schreibst wie ich es im vorigen Thread angegeben habe das ICAL-File ins FileSystem und übergibst diesen Pfad an die eigentliche XML-Funktion.

Ah, ich glaube, ich muss nich nach SUMMARY sondern nach DESCRIPTION
SUMMARY ist der Betreff des Termins
DESCRIPTION sind zusätzliche Beschreibungen des Termins

-edit- habe das oben zusätzlich noch in die Funktion eingebaut.

Aber man sollte wirklich mal drüber nachdenken die eigentliche Funktion die das ical in ein XML einliest so umzuschreiben das nicht nur nach Doppelpunkten getrennt wird sondern das ganze mit Regular Expressions macht. Das ist wesentlich zuverlässiger !! Werde mir das beizeiten mal anschauen, im Moment ist zu wenig Zeit...

p.s. Nehm diese Funktion hier, die macht genau das was du willst wesentlich zuverlässiger: http://evertpot.com/248/


Grüße Uwe
Bitte warten ..
Mitglied: NetworkingHomer
05.09.2013 um 21:28 Uhr
Moin Uwe!
Ich bin beeindruckt!

Mein derzeitiger Stand ist dieser (bevor ich dein letztes Posting las):

01.
function ical2xml($URL) {
02.

03.
  $myfile = file_get_contents($URL);
04.

05.
$myfile = str_replace("DESCRIPTION:", "DESCRIPTION::", $myfile);
06.
$myfile = str_replace("BEGIN:", "BEGIN::", $myfile);
07.
$myfile = str_replace("SUMMARY:", "SUMMARY::", $myfile);
08.
$myfile = str_replace("LAST-MODIFIED::", "LAST-MODIFIED:", $myfile);
09.
$myfile = str_replace("DATE:", "DATE::", $myfile);
10.
$myfile = str_replace("PRODID:", "PRODID::", $myfile);
11.
$myfile = str_replace("UID:", "UID::", $myfile);
12.
$myfile = str_replace("END:", "END::", $myfile);
13.
$myfile = str_replace("LOCATION:", "LOCATION::", $myfile);
14.
$myfile = str_replace("Europe/Berlin:", "Europe/Berlin::", $myfile);
15.
$myfile = str_replace("RRULE:", "RRULE::", $myfile);
16.
$myfile = str_replace("URI:", "URI::", $myfile);
17.

18.
 $myfile = str_replace("\n ", "", $myfile);
19.
  $myfile = str_replace("&", " and ", $myfile);
20.
  $mylines = split("\n", $myfile);
21.

22.
  $xml = "";
23.
  foreach($mylines as $line) {
24.
    if($line == "")
25.
      continue;
26.

27.
    list($key,$val) = split("::", $line);
28.
    $key = trim($key, "\r\n");
29.
    $val = trim($val, "\r\n");
30.
    $val = str_replace("\n", "", $val);
31.
    $val = str_replace("\r", "", $val);
Dein Link zu dem anderen Script sieht extrem interessant aus.
Jetzt muss ich da erstmal ne Nacht drüber schlafen.

Vielen Dank und bis demnächst!

Viele Grüße

Homer
Bitte warten ..
Ähnliche Inhalte
Router & Routing
Routing bricht zusammen
gelöst Frage von 127944Router & Routing57 Kommentare

Ich beschäftige mich nun seit diversen Tagen mit einem Problem, bei dem ich einfach nicht weiter komme. Aus mir ...

Windows Netzwerk
Kopiervorgang bricht ab !!!
gelöst Frage von alexlazaWindows Netzwerk6 Kommentare

Hallo Leute, im Einsatz ist ein HP ZBook 17 G4 mit WIN10 Pro. Seit neuestem bricht jeglicher kopiervorgang vom ...

Batch & Shell
XML-Inhalt austauschen
gelöst Frage von noscriptBatch & Shell10 Kommentare

Hallo zusammen Nachdem ich nun das komplette Internet gefühlt zwei Mal gelesen, aber nicht kapiert habe, versuch ichs nun ...

Datenbanken
Beispieldatenbank mit Inhalt
Frage von CometcolaDatenbanken3 Kommentare

Hallo zusammen, ich wollte mal in die Runde fragen, ob wer zufällig ein Tutorial kennt oder eine Datensammlung, die ...

Neue Wissensbeiträge
Humor (lol)
Preisvertipper
Information von Dilbert-MD vor 1 TagHumor (lol)6 Kommentare

Moin! weil heute Freitag ist, zeige ich Euch den Preisvertipper der Woche: vergesst den Acer Predator 21x, der ist ...

Windows Update
Sicherheitsupdate für SQL Server 2014 SP3
Information von sabines vor 2 TagenWindows Update2 Kommentare

Für den SQL Server 2014 existiert ein Sicherheitsupdate. Laut KB Artikel wird es als CU3 angezeigt: Server 2014 SP3 ...

Backup

Veeam Agent für MS Windows - neue Version verfügbar (bedingt jedoch offenbar .NET Framework 4.6)

Information von VGem-e vor 3 TagenBackup1 Kommentar

Moin Kollegen, einer unserer Server zeigte grad an, dass für o.g. Software ein Update verfügbar ist. Ob ein evtl. ...

Python

Sie meinen es ja nur gut - Microsoft hilft python-Entwicklern auf unnachahmliche Weise

Information von DerWoWusste vor 5 TagenPython2 Kommentare

Stellt Euch vor, Ihr nutzt python unter Windows 10 und skriptet damit regelmäßig Dinge. Nach dem Update auf Windows ...

Heiß diskutierte Inhalte
Windows Update
WSUS - erforderlich Updates
Frage von emeriksWindows Update24 Kommentare

Hi, ein gängiges Verfahren, welche Updates man am WSUS-Server genehmigen soll und welche nicht, beruft sich darauf, dass man ...

Debian
Alle Verbindungen bis auf eine IP Adresse blockieren
Frage von BananenmeisterDebian13 Kommentare

Hallo Zusammen, Ich habe einen Hyper-V Server auf dem ein debian (ohne desktop) läuft. Dort drauf ist ein Webserver ...

Windows 7
Windows 7: Keine Anmeldung mehr möglich
Frage von hreinartWindows 713 Kommentare

hallo, bei meinem win7 rechner (medion laptop) kann ich mich nicht mehr anmelden. er fährt ohne fehlermeldungen hoch, bringt ...

Netzwerke
Dataintegrity Win7
Frage von alexlaza11Netzwerke9 Kommentare

Schönen guten Abend, Ich wollte fragen wie ihr die Datenintigrität gewährleistet bei qualifizierten Systemen (Pharmaunternehmen, Lebensmittelkonzerne ect.) Die meisten ...