Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Frage Entwicklung PHP

Mitglied: NetworkingHomer

NetworkingHomer (Level 1) - Jetzt verbinden

03.09.2013 um 12:28 Uhr, 1998 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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Exchange Server
Inhalt von Postfächern in Exchange löschen (9)

Frage von m.reeger zum Thema Exchange Server ...

Microsoft Office
gelöst Excel 2010 Zellen mit bestimmten Inhalt mit Makro formartierten (5)

Frage von packmann2016 zum Thema Microsoft Office ...

Speicherkarten
USB-Stick laut Windows und Linux belegt, aber kein Inhalt zu sehen (5)

Frage von Pago159 zum Thema Speicherkarten ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...