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
GELÖST

Mit php Links ein icon voranstellen

Frage Entwicklung PHP

Mitglied: scriptkiddy

scriptkiddy (Level 1) - Jetzt verbinden

11.08.2009, aktualisiert 01.06.2010, 5028 Aufrufe, 18 Kommentare

Hallo zusammen,

Ich habe da mal ein bisschen ein komplexeres problem...

Ich arbeite gerade an einer website bei der ich den content der seite per fckeditor erstelle und dann als html in die datenbank schreibe und
entsprechend wieder auf der seite ausgebe... dies funktioniert soweit auch prima. Allerdings werden teilweise auch dateien direkt verlinkt... der upload klappt da auch jedoch macht der editor beim einfügen einen unschönen link
den ich dann immer wieder von hand ändern muss ... heist also ich möchte beim abschicken des forms bevor dieser in die datenbank geschrieben wird die links entsprechend manipulieren also sprich den namen des links in

dateiname.endung ändern und dem link ein fileicon entsprechend der endung voranstellen.

Ich habe mir da gedacht ich könnte dies mit preg_replace realisieren ...bzw mit preg_match_all allerdings bekomme ich hier kein gescheites ergebnis

01.
 // Links aus der Variable holen 
02.
 
03.
  preg_match_all('~<a[^>]*href="(.*)".*>(.*)</a>~Uis',$content,$ergebnisse); 
04.
  
05.
  // Alle Links ausgeben 
06.
  foreach ($ergebnisse as $link
07.
08.
	  echo "<pre>"
09.
print_r($link); 
10.
echo "</pre>"
11.
  }
Hier die Ausgabe davon... das obere file ist so wie ich es haben will und das untere ist so wie es der editor im moment automatisch macht.
und darunter die arrays sind die ausgabe von der php funktion ...

d76cc742081cb0f3d96610e7d07cdf6d-unbenannt - Klicke auf das Bild, um es zu vergrößern

Hoffe ihr habt verstanden was ich eigendlich will ich kann das immer so schlecht erklären .. wenn nicht fragt unklares nochmal nach
Für eure Hilfe bin ich euch schonmal im vorraus dankbar

Gruß

Patrick
Mitglied: godlie
11.08.2009 um 13:02 Uhr
hy,

also wenn wir davon ausgehen das diese Zeile:
01.
admin.architekt-...../.../../Architektengesetz.pdf 
die generierte aus dem fck ist, und du aber
01.
Architektengesetz.pdf 
haben möchtest, dann wäre das nicht so das problem.
Du brauchst ja nur das was nach dem letzten / vorkommt nehmen.
01.
$tmp = explode("/",$link); 
02.
$wantedLink = $tmp[count($tmp)-1];
Mit diesen 2 Zeilen erhälst du das Element nach dem letzen /
Bitte warten ..
Mitglied: scriptkiddy
11.08.2009 um 13:07 Uhr
ja das ist auch nicht das problem sondern ich bekomme einen html source ... mit allem drum und dran undmöchte aus dem sourcegewirr ALLE links die auf eine Datei zeigen mit eine icon versehen ... also sprich den aktuellen mit einem neuen link ersetzen dazu muss ich es aber erstma dazu bringen mir den kompletten link zu ersetzen .... die sachen wie dateiname und so aus dem dann auszulesen ist nicht mein problem....
Bitte warten ..
Mitglied: godlie
11.08.2009 um 13:27 Uhr
Hm,

ich überlege grad wie man das angehen kann.
Eine möglichkeit wäre es folgendes zu machen.
Erstmal mit preg_match_all alle Links auslesen,
die Ersetzungslinks in ein array zu packen,
das ganze danach mit preg_replace zu ersetzn.

Wenn du preg_replace mit einem array bei replace fütterst, sollte er das durchlaufen und alles Vorkomnisse der Reihe nach ersetzen.
Ich hab grad keine Sources da zum testen aber theoretisch dürfte das funktionieren.
Bitte warten ..
Mitglied: 16568
11.08.2009 um 13:38 Uhr
Hm, ich frage mich jedes Mal, warum vom Rücken durch die Brust ins Auge...?

Die Lösung lautet hier CSS...


Lonesome Walker
Bitte warten ..
Mitglied: scriptkiddy
11.08.2009 um 13:44 Uhr
Zitat von 16568:
Hm, ich frage mich jedes Mal, warum vom Rücken durch die Brust
ins Auge...?

Die Lösung lautet hier CSS...


Lonesome Walker


css ist ja schön und gut dann müsste ich aber dynamisch klassen den links zuordenen da nich alle links ein symbol bekommen und auch nich alle das selbe .... somit selbes problem komme also nich um php rum.
ich denke ich muss irgendwie ein passenden regulären ausdruck finden der mir das auch so zurückgibt wie ich die links habe dann kann ich die einfach mit dem was ich eigendlich haben will ersetzen .... aber zuerst muss ich die richtig auslesen können...
Bitte warten ..
Mitglied: 16568
11.08.2009 um 13:53 Uhr
Ich sach's ja, man will helfen, und dann sowas... :-p

Anyway, alleine schon aus Usability-Gründen würde ich Dir dennoch CSS ans Herz legen...

klick mich


Lonesome Walker
Bitte warten ..
Mitglied: godlie
11.08.2009 um 14:14 Uhr
So bin grad dabei rumzuspielen damit
Interessante aufgabenstellung.
Bitte warten ..
Mitglied: godlie
11.08.2009 um 14:29 Uhr
So jetzt hätte ich schon mal was aber eine frage:

Wie sieht denn das aus mit dem <a href> sind da noch andere argumente drinen?
wie z.b. ein target eine class oder sonst was?
Bitte warten ..
Mitglied: godlie
11.08.2009 um 14:37 Uhr
Naja auch egal obs dabei ist oder nicht hab die Lösung erweitert sodass die auch mitgenommen werden

01.
$test = preg_replace('{<a[^>]href="(.*?)"(.*?)>(.*?)</a>}','{<a href="$3"$2>$3</a>}',$content);
Damit dürftest du dann alle Links finden und diese auch ersetzen durch etwas was du brauchst.
Wenn noch fragen da sind einfach stellen.

gruß
Bitte warten ..
Mitglied: scriptkiddy
11.08.2009 um 14:57 Uhr
Zitat von 16568:
Ich sach's ja, man will helfen, und dann sowas... :-p

Anyway, alleine schon aus Usability-Gründen würde ich Dir
dennoch CSS ans Herz legen...

[http://webseiten-professionell.wikidot.com/schnipsel:css-automatische-link-icons
klick mich]


Lonesome Walker

repekt vielen dank ich nehme alles zurück... ich merke ich habe bei css noch sehr viel zu lernen ;)
Bitte warten ..
Mitglied: scriptkiddy
11.08.2009 um 15:09 Uhr
Zitat von godlie:
Naja auch egal obs dabei ist oder nicht hab die Lösung erweitert
sodass die auch mitgenommen werden

01.
> $test = 
02.
> preg_replace('{<a[^>]href="(.*?)"(.*?)>(.*?)</a>}','{<a 
03.
> href="$3"$2>$3</a>}',$content); 
04.
> 
Damit dürftest du dann alle Links finden und diese auch ersetzen
durch etwas was du brauchst.
Wenn noch fragen da sind einfach stellen.

gruß

Hi godlie,

Danke für deine Bemühungen deines scheint soweit auch zu fast zu funktionieren ich denke ich werde dies nutzen um den namen des files noch zu ändern...
allerdings scheint ed doch noch nicht ganz zu funktionieren hier mal der screen oben original unten mit deiner funktion ... scheint 1. nicht alle zu ändern (das mittlere nich) und 2. steht da unten einsam und verlassen noch eine 1 keine ahnung wieso ...

http://img220.imageshack.us/i/unbenanntvwh.jpg/

Gruß


Patrick
Bitte warten ..
Mitglied: 16568
11.08.2009 um 15:10 Uhr
Nun ja, gewisse Sachen wirst Du aber mit PHP lösen müssen (z.B. speziellen Links spezielle Klassen zuzuweisen), damit CSS dann die nötigen Icons liefert.


Alex
Bitte warten ..
Mitglied: godlie
11.08.2009 um 15:32 Uhr
Hoi,

nunja wenn du mir den html source zukommen lässt dann kann ich ja mal schaun was da lost ist.
Hab bei mir ja nur einen Testcontent erstellt.

gruß
Bitte warten ..
Mitglied: scriptkiddy
11.08.2009 um 15:39 Uhr
Zitat von godlie:
Hoi,

nunja wenn du mir den html source zukommen lässt dann kann ich
ja mal schaun was da lost ist.
Hab bei mir ja nur einen Testcontent erstellt.

gruß

01.
<div class="left_2"> 
02.
            	<p><u><strong><span style="font-size: larger;">Projekte&nbsp;</span></strong></u><br /> &nbsp;</p> <table width="100%" height="124" cellspacing="1" cellpadding="1" border="0" style="">     <tbody>         <tr>             <td><p>Umbau / Neuplanung einer Arztpraxis f&uuml;r Allgemeinmedizin in Weil am Rhein&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p></td>             <td><a href="http://admin.architekturbuero-huegel.de/files/Referenz-Projekte-Arztpraxis.pdf" target="_blank">Referenz-Projekte-Arztpraxis.pdf</a></td>         </tr>         <tr>             <td>&nbsp;test2</td>             <td><a target="_blank" href="http://admin.architekturbuero-huegel.de/pageresources/file/Architektengesetz.pdf">Architektengesetz.pdf</a></td>         </tr>         <tr>             <td>&nbsp;test3</td>             <td><a href="http://admin.architekturbuero-huegel.de/pageresources/file/Referenz-Projekte-Buerogebaeude.pdf">Referenz-Projekte-Buerogebaeude.pdf</a></td>         </tr>         <tr>             <td>&nbsp;</td>             <td>&nbsp;</td></tr></tbody></table><p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p><p><u><strong><span style="font-size: larger;">Projekte&nbsp;</span></strong></u><br /> &nbsp;</p> <table width="100%" height="124" cellspacing="1" cellpadding="1" border="0" style="">     <tbody>         <tr>             <td><p>Umbau / Neuplanung einer Arztpraxis f&uuml;r Allgemeinmedizin in Weil am Rhein&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p></td>             <td>{<a href="Referenz-Projekte-Arztpraxis.pdf" target="_blank">Referenz-Projekte-Arztpraxis.pdf</a>}</td>         </tr>         <tr>             <td>&nbsp;test2</td>             <td><a target="_blank" href="http://admin.architekturbuero-huegel.de/pageresources/file/Architektengesetz.pdf">Architektengesetz.pdf</a></td>         </tr>         <tr>             <td>&nbsp;test3</td>             <td>{<a href="Referenz-Projekte-Buerogebaeude.pdf">Referenz-Projekte-Buerogebaeude.pdf</a>}</td>         </tr>         <tr>             <td>&nbsp;</td>             <td>&nbsp;</td></tr></tbody></table><p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p>			</div> 
03.
 
04.
           
05.
            <!-- LEFT 2 ENDE --> 
06.
        </div><!-- LEFT ENDE --> 
07.
 
08.
 
ich weis ist unschön aber habe die formatierung vom editor entfernen lassen um platz in der datenbank zu sparen ;)
Bitte warten ..
Mitglied: godlie
11.08.2009 um 16:15 Uhr
Sodala,
ich konnte zwar keinen Fehler direkt feststellen, aber ich hab mir noch ein wenig den Kopf zerbrochen darüber.
Zum glück gibs eine sehr lässige Funktion die sich preg_replace_callback nennt.
Mit Hilfe derer können wir uns eine fkt anlegen mit derer Hilfe wir dann unseren Link überarbeiten können.
01.
 
02.
$test = preg_replace_callback('{<a[^>](.*?)href="(.*?)"(.*?)>(.*?)</a>}','reW',$content); 
03.
var_dump($test); 
04.
 
05.
function reW($matches) { 
06.
  $tm = explode("/",$matches[2]); 
07.
  $aLink = $tm[count($tm)-1]; 
08.
  return "<a $matches[1] href=\"http://what/ever/you/need/$aLink\" $matches[3]>$matches[4]</a>"; 
09.
}
Ich hab hier noch eingebaut das aus der URL in dem HREF der letzte "Zipfel" abgetrennt wird ..... dürfte ersichtlich sein oder?
Probier das mal aus
Bitte warten ..
Mitglied: scriptkiddy
11.08.2009 um 17:34 Uhr
hi,

klasse so funktionierts ... muss jetzt nurnoch verhindern das der das auf die normalen links anwendet ....aber das bekomm ich jetzt sicher hin

Danke für deine Hilfe...


Gruß

Patrick
Bitte warten ..
Mitglied: godlie
11.08.2009 um 17:53 Uhr
Hoi,

nunja wenn es nur darum geht links mit pdfs zu veränder, dann braucsht ja nur in der fkt reW prüfen ob ein .pdf vorhanden ist am schluss, andernfalls einfach den link normal zusammenpflastern und zurückgeben.....
Bitte warten ..
Mitglied: scriptkiddy
11.08.2009 um 17:57 Uhr
jo hab ich bereits getan und das ganze noch schön in eine funktion zusammengefasst und dann eingebaut funktioniert perfekt.... ;)
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...