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, 2099 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 ...

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 ...

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 ...

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)
Administrator.de Perlen
Tipp von DerWindowsFreak2 vor 2 TagenHumor (lol)3 Kommentare

Hallo, Heute beim stöbern auf dieser Seite bin auf folgenden Thread aus dem Jahre 2006 gestossen: Was meint ihr? ...

Erkennung und -Abwehr
OpenSSH-Backdoor Malware erkennen
Tipp von Frank vor 3 TagenErkennung und -Abwehr

Sicherheitsforscher von Eset haben 21 Malware-Familien untersucht. Die Malware soll Hintertüren via OpenSSH bereitstellen, so dass Angreifer Fernzugriff auf ...

iOS
WatchChat für Whatsapp
Tipp von Criemo vor 6 TageniOS5 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor!
Tipp von Criemo vor 7 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
PCIe 1.0 Grafikkarte für 3840x2160
Frage von Windows10GegnerGrafikkarten & Monitore30 Kommentare

Hallo, mein Vater hat einen neuen Monitor gekauft, welcher eine native Auflösung von 3840*2160 hat. Diese muss jetzt auch ...

Windows Server
Dienstnamen und oder Deutsche und Englische Beschreibung in services.msc gleichzeitig anzeigen
gelöst Frage von vafk18Windows Server23 Kommentare

Guten Morgen, die Suche nach Diensten in services.msc gestaltet sich immer wieder schwierig, weil mir je nach Aufgabe die ...

Windows 10
Windows Enterprise 1809 Eval nicht bootbar
Frage von Sunny89Windows 1022 Kommentare

Hallo zusammen, bevor ich mich jetzt noch stundenlang rumärger wollte ich euch fragen, ob Ihr die gleichen Probleme habt ...

JavaScript
Javascript: WebSql
gelöst Frage von internet2107JavaScript13 Kommentare

Guten Morgen zusammen, zunächst einmal einen schönen dritten Advent. Ich habe ein Problem mit Javascript und WebSQL. Bisher habe ...