php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #31 (permalink)  
Alt 22-04-2013, 10:50
Melewo
 Registrierter Benutzer
Links : Onlinestatus : Melewo ist offline
Registriert seit: Jan 2013
Beiträge: 365
Melewo befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von newbie1955 Beitrag anzeigen
Danke für die Hilfe, aber bei mir kommen die Umlaut-Begriffe trotzdem.
Prost, habe schon lange kein Bier mehr getrunken, wird vielleicht mal wieder Zeit. Kann jetzt Dein Problem schlecht nachvollziehen, weil es bei mir funktioniert. Was Du noch machen könntest, mal die gesuchten Begriffe und die Titel in einer Datei abspeichern, ob da Unterschiede erkennbar werden. Ergänze dazu den Code mal durch die mit *** kommentierten Zeilen.

PHP-Code:
<?php header("Content-Type: text/html; charset=UTF-8"); ?>
<!DOCTYPE html>
<html>

<head>
<title>Test</title>
</head>

<body>
<div>
<ul>
<?php error_reporting(E_ERROR|E_PARSE);  // hochgesetzt wegen Entity-Warnungen

$data file_get_contents("http://www.mz-web.de/mitteldeutschland/20641266,20641266.html");

$doc = new DOMDocument();
$doc->loadHTML("<?xml encoding=\"UTF-8\">".$data);

$xPath   = new DOMXPath($doc);
$zaehler 0;

$epap   "E-Paper";
$abge   "Abgeordnete befragen";
$glueck "Glückwünsche";
$trau   "Traueranzeigen";
$herz   "Herzenswünsche";
$speicher "Titel:\n";      /*** *** füge $speicher = "Titel:\n"; hinzu *** ***/

foreach ($xPath->query("//h2/a") as $element) {

    
$title $element->nodeValue
    
    
$pos  mb_strpos($title$epap,   0"utf-8");
    
$pos1 mb_strpos($title$abge,   0"utf-8");
    
$pos2 mb_strpos($title$glueck0"utf-8");
    
$pos3 mb_strpos($title$trau,   0"utf-8");
    
$pos4 mb_strpos($title$herz,   0"utf-8");

    
$href $element->getAttribute('href');
    
$hreft "http://www.mz-web.de" $href;
    
$search "„";


    if ((
$zaehler <= 13) && ($pos === false) && ($pos1 === false) && ($pos2 === false) && ($pos3 === false) && ($pos4 === false)) {

        echo 
"<li><a href=\"".htmlspecialchars($hreftENT_QUOTES"UTF-8"false)."\" target=\"_blank\">".htmlspecialchars($titleENT_QUOTES"UTF-8"false)."</a></li>\n";

        
$zaehler++;
        
$speicher .= htmlspecialchars($titleENT_QUOTES)."\n";      /*** *** füge $speicher .= $title."\n"; hinzu *** ***/
    
}    
}

/*** *** füge beide Zeilen hinzu *** ***/

$pruefe $epap."\n".$abge."\n".$glueck."\n".$trau."\n".$herz."\n\n".$speicher;

file_put_contents("kontrolle.txt"$pruefe);


/* kontrolle.txt:

E-Paper
Abgeordnete befragen
Glückwünsche
Traueranzeigen
Herzenswünsche

Titel:
Spaziergänger finden Frauenleiche
Zusätzliche Milliarden für Instandhaltung notwendig
Ein Krokodil als Dankeschön
Empörung nach Rauswurf
Männer bedrohen Imbissbesitzer in Bad Kösen
Betrug kann böse Folgen haben
DGB setzt weiter auf Dialog
Abenteurer suchen Gold in Thüringen
Sechs Schwerverletzte bei Unfall auf A4
Elke du Bois Spitzenkandidatin der Freien Wähler
Ausbildungsplätze
Reisemarkt
*/
?>
</ul>
</div>
</body>
</html>
Und dann:

Zitat:
Zitat von newbie1955 Beitrag anzeigen
PHP-Code:
htmlspecialchars($titleENT_QUOTES'UTF-8'false)."</a></li>\n"
Zitat:
Zitat von newbie1955 Beitrag anzeigen
PHP-Code:
htmlspecialchars($titleENT_QUOTESfalse)."</a></li>\n"
Noch einen Schnitzer, den ich mit kopiert hatte und der mir erst jetzt auffiel. Der hat jetzt nichts mit Deinem Problem zu tun, nur so allgemein. Du brauchst nicht alle Parameter verwenden, doch wenn, so würde ich die Reihenfolge einhalten und true oder false als boolescher Wert kommt erst an vierter Stelle. Die Werte sollten durch Komma getrennt werden.

PHP-Code:
htmlspecialchars($titleENT_QUOTES"UTF-8"false)."</a></li>\n"

Geändert von Melewo (22-04-2013 um 13:44 Uhr)
Mit Zitat antworten
  #32 (permalink)  
Alt 22-04-2013, 13:51
newbie1955
 Registrierter Benutzer
Links : Onlinestatus : newbie1955 ist offline
Registriert seit: Dec 2012
Beiträge: 241
newbie1955 befindet sich auf einem aufstrebenden Ast
Standard Hallo

Danke für den Versuch, habe Deinen Code komplett umgesetzt. Hier ist das, was in meiner Textdatei landet. Es scheint ja eindeutig ein encoding-Problem zu sein, aber welches? Wenn er "Glückwünsche" sucht, aber "Glückwünsche" findet, ist es ja kein Wunder, wenn die Suchbegriffe nicht ausgeschlossen werden:

Code:
E-Paper
Abgeordnete befragen
Glückwünsche
Traueranzeigen
Herzenswünsche

Titel:
Möllring kommt, Wolff geht
Waldbrandgefahr durch fehlende Niederschläge
Alles eine Frage des Führungsstils
Spaziergänger finden Frauenleiche
Zusätzliche Milliarden für Instandhaltung notwendig
Ein Krokodil als Dankeschön
Empörung nach Rauswurf
Männer bedrohen Imbissbesitzer in Bad Kösen
Betrug kann böse Folgen haben
DGB setzt weiter auf Dialog
Glückwünsche
Herzenswünsche
Ausbildungsplätze
Reisemarkt
Auf der Seite ausgegeben wird:

Gruß
newbie1955
Mit Zitat antworten
  #33 (permalink)  
Alt 22-04-2013, 14:27
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Das Problem ist, dass die Daten UTF-8 kodiert sind, aber deine PHP-Datei nicht. Also eh und je das selbe Problem. Es liegt einfach an der Kodierung der PHP-Datei. Das Problem hat nichts mit PHP selber zu tun, sondern liegt auf der Dateiebene. Somit ist es eigentlich sinnlos hier weiter PHP-Code zu diskutieren, da hier nicht der Fehler zu suchen ist.
Mit Zitat antworten
  #34 (permalink)  
Alt 22-04-2013, 14:58
Melewo
 Registrierter Benutzer
Links : Onlinestatus : Melewo ist offline
Registriert seit: Jan 2013
Beiträge: 365
Melewo befindet sich auf einem aufstrebenden Ast
Standard

Mein Test war unter Localhost, auf einem Server erhalte ich auch so ein Ergebnis, jedoch einheitlich verunstaltet. Du könntest jetzt versuchen, ob die Titel mit utf8_decode() richtig gespeichert werden, so dass es einheitlich ist und falls ja, utf8_decode() nur für mb_strpos zur Suche verwenden.

PHP-Code:
$pruefe $epap."\n".$abge."\n".$glueck."\n".$trau."\n".$herz."\n\n".utf8_decode($speicher); 
Wäre zwar nur ein Notbehelf, nur vielmehr fällt mir da nicht ein. Das wird sich schon so verhalten, wie h3ll schrieb.
Mit Zitat antworten
  #35 (permalink)  
Alt 22-04-2013, 15:51
newbie1955
 Registrierter Benutzer
Links : Onlinestatus : newbie1955 ist offline
Registriert seit: Dec 2012
Beiträge: 241
newbie1955 befindet sich auf einem aufstrebenden Ast
Standard Hallo

Ja, das glaube ich durchaus. h3ll. Nur weiß ich nicht, was ich noch tun kann, wenn ich den Code in Notepad++ mit utf-8 ohne BOM abspeichert und Binär mit Filezilla übertragen habe (wie von Dir vorgeschlagen) - und es trotzdem nicht funktioniert.

Habt Ihr übrigens noch mal einen Tipp (Link zm Manual), wie ich diese ganzen einzelnen $pos-Abfragen mithilfe eines Arrays vereinfache (Blacklist)?

Danke, Melewo, das mit utf8-decode ist im Moment bereits meine Notlösung, funktioniert auch, aber ich hätte das natürlich gerne grundsätzlich geklärt und verstanden...

Gruß
newbie1955

Geändert von newbie1955 (22-04-2013 um 15:59 Uhr)
Mit Zitat antworten
  #36 (permalink)  
Alt 22-04-2013, 16:28
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von newbie1955 Beitrag anzeigen
Ja, das glaube ich durchaus. h3ll. Nur weiß ich nicht, was ich noch tun kann, wenn ich den Code in Notepad++ mit utf-8 ohne BOM abspeichert und Binär mit Filezilla übertragen habe (wie von Dir vorgeschlagen) - und es trotzdem nicht funktioniert.
Vielleicht funkt irgendwas beim Hoster dazwischen. Vielleicht der FTP-Server. Keine Ahnung.

Das Problem kannst du umgehen, indem du PHP-Dateien in ASCII-Codierung abspeichert und Sonderzeichen nur binär angibts. zB.

PHP-Code:
$name "Franz M\xC3\xBCller"// Franz Müller als UTF-8 Kodierung 
Das ist quasi der gemeinsame Nenner, der immer funktioniert. ASCII versteht jedes System.

Eine Übersicht der UTF-8 Zeichen findest du hier: Unicode/UTF-8-Zeichentabelle
Mit Zitat antworten
  #37 (permalink)  
Alt 22-04-2013, 20:42
newbie1955
 Registrierter Benutzer
Links : Onlinestatus : newbie1955 ist offline
Registriert seit: Dec 2012
Beiträge: 241
newbie1955 befindet sich auf einem aufstrebenden Ast
Standard strpos - array?

Danke für den Tipp.

Und das Vereinfachen der Serienabfrage von auszuschließenden Begriffen, geht das auch per array? Beim googlen habe ich nur Fragende gefunden, aber keine funktionierenden Antworten. Nur ein Link oder Tipp wäre schön, danke!

Gruß
newbie1955
Mit Zitat antworten
  #38 (permalink)  
Alt 22-04-2013, 21:34
Melewo
 Registrierter Benutzer
Links : Onlinestatus : Melewo ist offline
Registriert seit: Jan 2013
Beiträge: 365
Melewo befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von newbie1955 Beitrag anzeigen
Nur ein Link oder Tipp wäre schön, danke!
Wenn Du jetzt ein ganz klein wenig mehr Erfahrung hättest, dann hätte ich vorgeschlagen, schaue doch einfach mal, was die bei Stack Overflow so an Ansätzen zu bieten haben, ob Du daraus etwas entwickeln könntest und versuche es dann mit mb_strpos umzusetzen.

php - Using an array as needles in strpos - Stack Overflow

Oder schaue mal nach strpos und stripos oder in_array, da findest Du auch so einige Dinge, die einen Ansatz enthalten könnten, den Du dann mit mb_strpos umsetzen könntest.

PHP: strpos - Manual
Mit Zitat antworten
  #39 (permalink)  
Alt 23-04-2013, 00:46
Melewo
 Registrierter Benutzer
Links : Onlinestatus : Melewo ist offline
Registriert seit: Jan 2013
Beiträge: 365
Melewo befindet sich auf einem aufstrebenden Ast
Standard

Habe mal am ersten Beispiel von Stack Overflow solange gebastelt, bis es gepasst hat und nur jetzt zum Test die unerwünschten Titel auf den Else-Zweig gelegt Wenn Du den Else-Zweig entfernst, dann wird "Keine Ausgabe bei *** *** ..." halt nicht mit ausgegeben.

Und wenn Du libxml_use_internal_errors auf true setzt, dann bist Du auch die Entitie-Warnungen los und kannst dennoch ganz normal mit error_reporting arbeiten, wie es ausschaut. Oder wie ist das zu verstehen?

PHP-Code:
<?php header("Content-Type: text/html; charset=UTF-8"); ?>
<!DOCTYPE html>
<html>

<head>
<title>Test</title>
</head>

<body>
<div>
<ul>
<?php
error_reporting
(E_ALL);
ini_set("display_errors"true);
libxml_use_internal_errors(true);

$data file_get_contents("http://www.mz-web.de/mitteldeutschland/20641266,20641266.html");

$doc = new DOMDocument();
$doc->loadHTML("<?xml encoding=\"UTF-8\">".$data);

$xPath   = new DOMXPath($doc);
$zaehler 0;

$letters = array(

    
"E-Paper",
    
"Abgeordnete befragen",
    
"Glückwünsche",
    
"Traueranzeigen",
    
"Herzenswünsche"
);
$end count($letters);

function 
Titelei($titel$letter$end) {

    for (
$i 0$i $end$i++) {

        if (
mb_strpos($titel$letter[$i], 0"utf-8") !== false) {

            return 
$titel false;
        }
    }
    return 
$titel true;
}

foreach (
$xPath->query("//h2/a") as $element) {

    
$title $element->nodeValue;

    
$href $element->getAttribute('href');
    
$hreft "http://www.mz-web.de" $href;
    
$search "„";


    if(
Titelei($title$letters$end) !== false) {

        if (
$zaehler <= 13) {

            echo 
"<li><a href=\"".htmlspecialchars($hreftENT_QUOTES"UTF-8"false)."\" target=\"_blank\">".htmlspecialchars($titleENT_QUOTES"UTF-8"false)."</a></li>\n";

            
$zaehler++;
        }
    }
    else {echo 
"<li>Keine Ausgabe bei *** *** ".htmlspecialchars($titleENT_QUOTES"UTF-8"false)."</li>\n";
    }
}

/*
    Wolff will Jobsuche in Ruhe angehen
    Die Bahn baut auf Beton
    Waldbrandgefahr durch fehlende Niederschläge
    Möllring kommt, Wolff geht
    Keine Ausgabe bei *** *** E-Paper
    Alles eine Frage des Führungsstils
    63-Jährige Leipzigerin zweifelsfrei identifiziert
    Zusätzliche Milliarden für Instandhaltung notwendig
    Ein Krokodil als Dankeschön
    Empörung nach Rauswurf
    Männer bedrohen Imbissbesitzer in Bad Kösen
    Keine Ausgabe bei *** *** Abgeordnete befragen
    Keine Ausgabe bei *** *** Glückwünsche
    Keine Ausgabe bei *** *** Traueranzeigen
    Keine Ausgabe bei *** *** Herzenswünsche
    Ausbildungsplätze
    Reisemarkt
*/
?>

Geändert von Melewo (23-04-2013 um 01:29 Uhr)
Mit Zitat antworten
  #40 (permalink)  
Alt 23-04-2013, 10:10
newbie1955
 Registrierter Benutzer
Links : Onlinestatus : newbie1955 ist offline
Registriert seit: Dec 2012
Beiträge: 241
newbie1955 befindet sich auf einem aufstrebenden Ast
Standard

Danke, habe jetzt mal die utf_8-Notlösung (für die Umlautwörter) hinzugefügt, dann funktioniert es, außer, dass er in der *** ***-AUsgabe die Umlaut-Begriffe gar nicht erst ausgibt, was merkwürdig ist, für die Lösung aber egal.

Code:
    Platzt das Milliarden-Projekt?
    Private Bierbrauer sind selten in Sachsen-Anhalt
    Er kommt - aber wird man ihn auch sehen?
    Kind schwer verletzt ins Krankenhaus eingeliefert
    Keine Ausgabe bei *** *** E-Paper
    Hartmut Möllring sieht sich als verlässlichen Verhandlungspartner
    Geschmack der Freiheit aus Bernburg
    Wolff will Jobsuche in Ruhe angehen
    Die Bahn baut auf Beton
    Waldbrandgefahr durch fehlende Niederschläge
    Möllring kommt, Wolff geht
    Keine Ausgabe bei *** *** Abgeordnete befragen
    Keine Ausgabe bei *** ***
    Keine Ausgabe bei *** *** Traueranzeigen
    Keine Ausgabe bei *** ***
    Keine Ausgabe bei *** ***
    Keine Ausgabe bei *** *** Reisemarkt
Ich hatte dann nach vielem Suchen auch noch dies hier gefunden, was ich nochmal probieren werde:

Code:
$keyword = array('SPOT','ASTRO','FNT','MP3','RM','HOW','VIDEO');
$message = strtoupper("hello, how are you?");
$output = "Keywords found: ";
foreach ($keyword as $k) {
  if(strpos($message, $k)> -1){$output .= $k . ', ';}
}
echo rtrim($output, ", ");
AUf jeden Fall Danke für die Hilfe! Hoffe, dass ich das utf8-Rätsel dann auch noch mal lösen werde.

Gruß
newbie
Mit Zitat antworten
  #41 (permalink)  
Alt 23-04-2013, 11:15
Melewo
 Registrierter Benutzer
Links : Onlinestatus : Melewo ist offline
Registriert seit: Jan 2013
Beiträge: 365
Melewo befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von newbie1955 Beitrag anzeigen
Danke, habe jetzt mal die utf_8-Notlösung (für die Umlautwörter) hinzugefügt, dann funktioniert es, außer, dass er in der *** ***-AUsgabe die Umlaut-Begriffe gar nicht erst ausgibt, was merkwürdig ist, für die Lösung aber egal.
Dachte ich mir schon, weil ich vergessen hatte zu erwähnen, dass die utf_8-Notlösung mit in die Funktion gehört, da ja nur für die Suche mit mb_strpos bestimmt.

PHP-Code:
function Titelei($titel$letter$end) {

    
$titel utf8_decode($titel); // Oder je nachdem, wie Deine utf_8-Notlösung aussieht.

    
for ($i 0$i $end$i++) {
... 
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
phpcode mit aes verschlüsseln und wieder ausgeben ^^ (mal wieder crypten xD) Restless PHP Developer Forum 5 07-11-2009 17:35
[REGEX] Mal wieder RegEx-Probleme Luke PHP Developer Forum 24 04-12-2003 10:57
Mal wieder!!! Roninreneo PHP Developer Forum 2 08-04-2003 23:43
hosteurope hat mal wieder Probleme Berni Provider / Domains 9 13-09-2002 08:19
Einer Variablen den ersten Char kürzen / char 2 - xxx entnehmen Phish PHP Developer Forum 6 10-11-2001 15:28

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:38 Uhr.