SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 23.10.2004, 17:55:10
mad-boy mad-boy ist offline
Junior Member
 
Registriert seit: Aug 2002
Beiträge: 395
mad-boy eine Nachricht über ICQ schicken
RegEx will nicht (bei Umlauten?)

Hi,
folgender Code soll in Texten nach Namen von Filmen suchen die in einer Datanbank vorhanden sind und diese verlinken, Filmnamen in den Texten sind immer komplett groß geschrieben:

PHP-Code:
$query "SELECT `name` FROM filme_index";
$query mysql_query($query);
while(
$q mysql_fetch_array($query)) {
    
$search[]="/".strtoupper($q['name'])."/";
    
$replace[]="<a href="/filme/".word2url($q['name'])."/">".strtoupper($q['name'])."</a>";

Das klappt soweit ganz gut, z.B. bei Titeln wie "GROSSE HAIE - KLEINE FISCHE". Bei Titeln wie "SHREK - DER TOLLKÜHNE HELD" oder "SHREK 2 - DER TOLLKÜHNE HELD KEHRT ZURÜCK" aber z.B. nicht! Ich gehe davon aus das es an den Umlauten liegt, aber wieso klappt das so nicht?

Gruss, Michael
Mit Zitat antworten
  #2  
Alt 23.10.2004, 20:03:06
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
"Klappt nicht", ist keine sehr gute Fehlerbeschreibung.

Außerdem sehe ich keine Zeile, in der ersetzt wird.
Mit Zitat antworten
  #3  
Alt 23.10.2004, 20:07:27
mad-boy mad-boy ist offline
Junior Member
 
Registriert seit: Aug 2002
Beiträge: 395
mad-boy eine Nachricht über ICQ schicken
huups, die Zeile wo ersetzt wird kommt weiter unten:

$text=preg_replace($search,$replace,$text);

und zum Thema klappt nicht: es klappt halt nicht! ^^ bei den einen Filmtiteln setzt er wunderbar den Link hin so wie es sein soll und bei den andern scheint er die Übereinstimmung gar nicht zu finden, auf jeden Fall ist da nirgendswo ein Link im Quellcode! Bin ja selber Ratlos, ich habs jetzt zwar nochmal bei nen paar weiteren Filmen überprüft, aber mehr sagen als es scheint an den Umlauten zu liegen, kann ich leider auch nicht! :( Ich verstehs nicht!

//EDIT: http://www.movie-addict.de/filme/Gro...Kleine+Fische/ gucks dir selber an! Grosse Haie - Kleine Fische und Findet Nemo wird ersetzt, wunderbar, dagegen aber SHREK - DER TOLLKÜHNE HELD und SHREK 2 - DER TOLLKÜHNE HELD KEHRT ZURÜCK nicht!
Mit Zitat antworten
  #4  
Alt 23.10.2004, 20:11:47
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
1. Verwende lieber str_replace(), da dieses schneller ist.
2. Wandelst du Sonderzeichen mit htmlentities() um, bevor du die Titel ersetzen willst? Du musst natürlich zunächst die Titel in Links umwandeln und anschließend die Sonderzeichen ersetzen, da nach der Umwandlung der Sonderzeichen, diese natürlich nicht mehr gefunden werden.
Mit Zitat antworten
  #5  
Alt 23.10.2004, 21:10:01
mad-boy mad-boy ist offline
Junior Member
 
Registriert seit: Aug 2002
Beiträge: 395
mad-boy eine Nachricht über ICQ schicken
Hi,
str_replace werde ich mal testen, aber: Wozu soll ich die Sonderzeichen mit htmlentities() umwandeln? Die sind sowohl auf der Seite als auch in der Datenbank im original gespeichert und so sollte es auch eigentlich bleiben, sonst bin ich dauernd nur am hin und her wandeln wenn ich die wieder irgendwo auslesen will! ^^

//EDIT: str_replace funktioniert genauso, Titel mit Umlauten werden nicht ersetzt, der Rest schon!

Geändert von mad-boy (23.10.2004 um 21:12:21 Uhr)
Mit Zitat antworten
  #6  
Alt 23.10.2004, 21:40:21
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
Zitat:
Original geschrieben von mad-boy
Wozu soll ich die Sonderzeichen mit htmlentities() umwandeln?
Du solltest Sonderzeichen in den entsprechenden HTML-Code umwandeln, damit deine Seite auch von Leute betrachtet werden kann, die nicht unbedingt den gleichen Zeichensatz wie du nutzen: Zeichenvorrat, Sonderzeichen und HTML-eigene Zeichen

Zitat:
str_replace funktioniert genauso, Titel mit Umlauten werden nicht ersetzt, der Rest schon!
Dann zeig mal etwas mehr von deinem Script.
Mit Zitat antworten
  #7  
Alt 23.10.2004, 22:04:54
mad-boy mad-boy ist offline
Junior Member
 
Registriert seit: Aug 2002
Beiträge: 395
mad-boy eine Nachricht über ICQ schicken
Ich hab im HEAD Bereich aber den Zeichensatz drin stehen! ^^ Aber naja von mir aus jag ich noch nen HTML-Parser über die kompletten Inhalte! ^^

also das gesamte Script ist in meiner BBCode Funktion drin:

PHP-Code:
function bbcode($text) {

    
//HTML Tags entfernen
    
$text=str_replace("<","&lt;",$text);
    
$text=str_replace(">","&gt;",$text);

    
$text=nl2br($text);    //Im restlichen Code <BR>'s einfügen

    
$query "SELECT `name` FROM filme_index";
    
$query mysql_query($query);
    while(
$q mysql_fetch_array($query)) {
        
$s_titel[]=strtoupper($q['name']);
        
$r_titel[]="<a href="/filme/".word2url($q['name'])."/">".strtoupper($q['name'])."</a>";
    }
    
$text str_replace($s_titel,$r_titel,$text);

    
//Suchstrings für restlichen Code:
    
$search[]="/[url](.*?)[/url]/si";
    
$search[]="/[url=(.*?)](.*?)[/url]/si";
    
$search[]="/[mail](.*?)[/mail]/si";
    
$search[]="/[mail=(.*?)](.*?)[/mail]/si";
    
$search[]="/[b](.*?)[/b]/si";
    
$search[]="/[u](.*?)[/u]/si";
    
$search[]="/[i](.*?)[/i]/si";
    
$search[]="/[img](.*?)[/img]/si";

    
//Replacestrings für restlichen Code:
    
$replace[]="<a href="1" target="_blank">1</a>";
    
$replace[]="<a href="1" target="_blank">2</a>";
    
$replace[]="<a href="mailto:1" target="_blank"><img src="/template/".$_SESSION['template']."/mail.gif" border=0>1</a>";
    
$replace[]="<a href="mailto:1" target="_blank"><img src="/template/".$_SESSION['template']."/mail.gif" border=0>2</a>";
    
$replace[]="<B>1</B>";
    
$replace[]="<U>1</U>";
    
$replace[]="<I>1</I>";
    
$replace[]="<img src="1" border=0>";
    
    
$text=preg_replace($search,$replace,$text); //Restlichen Code ersetzen

    
return $text;

Viel mehr gibts da auch nicht! Als Beispiel wie der Text dann geparst wird:

PHP-Code:
$select "SELECT * FROM news WHERE `id`='".$_GET['id']."'";
$select mysql_query($select);
$e mysql_fetch_array($select);

$tpl->setVariable(array(
                        
"headline"=>$e['headline'],
                        
"text"=>bbcode($e['text']),
                        
"datum"=>strftime("%d.%m.%Y",strtotime($e['datum'])),
                        
"quelle"=>$e['quelle']
                        )); 
Es ist eben wirklich nicht viel an Script, deswegen versteh ich nicht was der da macht! Werden Umlaute beim auslesen aus einer MySQL Tabelle vielleicht irgendwie anders ausgelesen oder so?
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:00:42 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt