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
  #1 (permalink)  
Alt 20-04-2013, 00:21
newbie1955
 Registrierter Benutzer
Links : Onlinestatus : newbie1955 ist offline
Registriert seit: Dec 2012
Beiträge: 241
newbie1955 befindet sich auf einem aufstrebenden Ast
Standard Wieder mal char-Probleme

Hallo, ich lese eine Website aus, doch die Anführungszeichen kommen trotz ENT_QUOTES verstümmelt als Fragezeichen zurück. Mein php, das auf Vorschläge aus dem Forum zurückgeht sieht so aus:

PHP-Code:
<?php

/*error_reporting( -1 );
ini_set('display_errors', TRUE);
*/

$data file_get_contents('http://www.webseite.de/sachsen/');
$data utf8_decode($data);

$doc = new DOMDocument(); 
$doc->loadHTML($data); 

$xPath = new DOMXPath($doc);

$zaehler 0;
foreach (
$xPath->query('//h1/a') as $element
{    
   

     
$href $element->getAttribute('href');
     
$hreft "http://www.webseite.de" $href;
     
$title $element->nodeValue

   
/*$title = $element->getAttribute('title');*/
        


If ($zaehler <= 13)
    {

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


                 
$zaehler++;
           }
    }  


?>


</ul>
Im Quelltext der Webseite sieht es so aus:

HTML-Code:
 <h1>       <a title="Polizeieinsatz gegen „Reichsbürger“" 
href="/sachsen/polizeieinsatz-gegen-reichsbuerger-2556336.html">
Polizeieinsatz gegen „Reichsbürger“ </a>     </h1>
Ausgegeben wird es so:

Wie kriege ich die Fragezeichen in Anführungsstriche gewandelt.

Gruß und Dank newbie 1955
Mit Zitat antworten
  #2 (permalink)  
Alt 20-04-2013, 10:43
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.595
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Setzt du auf deiner Seite den richtigen Zeichensatz?
Mit Zitat antworten
  #3 (permalink)  
Alt 20-04-2013, 12:32
newbie1955
 Registrierter Benutzer
Links : Onlinestatus : newbie1955 ist offline
Registriert seit: Dec 2012
Beiträge: 241
newbie1955 befindet sich auf einem aufstrebenden Ast
Standard charset

Hallo, bei mir auf der Seite:

HTML-Code:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
Auf der eingelesenen Seite
HTML-Code:
   <meta charset="utf-8" />
Alle anderen Seiten kommen ja auch richtig.
Mit Zitat antworten
  #4 (permalink)  
Alt 20-04-2013, 12:48
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.595
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Der meta-Tag wird vom Browser nicht beachtet. Du musst den Zeichensatz im HTTP-Header setzen.

PHP-Code:
header('Content-Type: text/html; charset=utf-8'
Mit Zitat antworten
  #5 (permalink)  
Alt 20-04-2013, 13:30
newbie1955
 Registrierter Benutzer
Links : Onlinestatus : newbie1955 ist offline
Registriert seit: Dec 2012
Beiträge: 241
newbie1955 befindet sich auf einem aufstrebenden Ast
Standard Ergänzung

Auf der Seite steht offenbar links das "&bdquo;", aber mit str_replace kann ich es auch nicht ersetzen. Gibt es eine direkt Möglichkeit herauszufinden, wie ein bestimmtes Zeichen auf der Seite Kodiert wurde? urlencode hilft ja auch nicht.
Mit Zitat antworten
  #6 (permalink)  
Alt 20-04-2013, 13:39
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.595
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Der DOM-Parser wird, vermute ich, die Entities durch die entsprechende Zeichen automatisch ersetzen. Also da solltest du nichts mehr tun müssen. Entities haben keine Kodierung, sondern sie entsprechen unabhängig von der Kodierung immer dem selben Zeichen.

Bei htmlspecialchars() musst du übrigens als dritten Parameter auch die richtige Zeichenkodierung angeben.
Mit Zitat antworten
  #7 (permalink)  
Alt 20-04-2013, 16:25
newbie1955
 Registrierter Benutzer
Links : Onlinestatus : newbie1955 ist offline
Registriert seit: Dec 2012
Beiträge: 241
newbie1955 befindet sich auf einem aufstrebenden Ast
Standard chars

also das mit der richtigen Zeichenkodierung bei htmspecialchars habe ich hier

PHP htmlspecialchars() Function

nicht gefunden.


Und das Setzen des Zeichensatzes im HTTP-Header hat nicht geholfen.
Aber dennoch danke für den Hinweis!

Auch ein define('CHARSET', 'UTF-8'); half nix

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

Defines encoding used in conversion. If omitted, the default value for this argument is ISO-8859-1 in versions of PHP prior to 5.4.0, and UTF-8 from PHP 5.4.0 onwards.

For the purposes of this function, the encodings ISO-8859-1, ISO-8859-15, UTF-8, cp866, cp1251, cp1252, and KOI8-R are effectively equivalent, provided the string itself is valid for the encoding, as the characters affected by htmlspecialchars() occupy the same positions in all of these encodings.


PHP: htmlspecialchars - Manual
Mit Zitat antworten
  #9 (permalink)  
Alt 20-04-2013, 17:32
newbie1955
 Registrierter Benutzer
Links : Onlinestatus : newbie1955 ist offline
Registriert seit: Dec 2012
Beiträge: 241
newbie1955 befindet sich auf einem aufstrebenden Ast
Standard Ja,

ich glaube es Dir ja, ich wollte nur sagen, dass nicht überall darauf hingewiesen wird und auch in den diversen Manuals sehr sehr viele Anwendungsbeispiele aufgeführt sind ohne Angabe des Zeichensatzes. Danke für den Hinweis.

Aber auch das hat leider die Fragezeichen nicht in Anführungsstriche verwandelt ausgegeben.
Mit Zitat antworten
  #10 (permalink)  
Alt 20-04-2013, 18:18
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.595
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Ich hab es jetzt mal selber ausprobiert. Das Problem ist, dass die eingelesene HTML-Seite kaputt ist.
HTML-Code:
<meta charset="utf-8" />
ist kein gültiger HTML-Code. Es müsste lauten:
HTML-Code:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
Du kannst den DOM-Parser dazu überreden trotzdem UTF-8 zu verwenden, wenn du folgendes machst:
PHP-Code:
$doc->loadHTML('<?xml encoding="UTF-8"> . $data);
Ist zwar nicht besonders schön, aber wenn schon der Source kaputt ist, gibts entweder die Möglichkeit ihn zu reparieren (also in dem du dich an den Seitenbetreiber wendest) oder versuchen Workarounds zu basteln. Es kann natürlich sein, dass der Workaround irgendwann nicht mehr funktioniert, wenn der Seitenbetreiber auf die Idee kommt auf seiner Seite rumzubasteln.

Edit: Nach "UTF-8"> fehlt übrigens ein Hochkomma. Das hat die Foren-Software verschluckt.

Geändert von h3ll (20-04-2013 um 18:21 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 20-04-2013, 18:24
mephisto111
 Registrierter Benutzer
Links : Onlinestatus : mephisto111 ist offline
Registriert seit: Nov 2003
Beiträge: 52
mephisto111 befindet sich auf einem aufstrebenden Ast
Standard utf8_decode

Hallo,

wenn die Web-Seite UTF-8-kodiert ist, wird sie durch die zweite Zeile

$data = utf8_decode($data);

verstümmelt. Die Gänsefüßchen sind nämlich gar kein Bestandteil von ISO-8859-1. Kurz: "utf8_decode" ist nur dann (möglicherweise) sinnvoll, wenn man sicher ist, dass alle vorkommenden Zeichen auch in ISO-8859-1 dargestellt werden können.

Geändert von mephisto111 (20-04-2013 um 18:31 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 20-04-2013, 18:25
newbie1955
 Registrierter Benutzer
Links : Onlinestatus : newbie1955 ist offline
Registriert seit: Dec 2012
Beiträge: 241
newbie1955 befindet sich auf einem aufstrebenden Ast
Standard Danke, aber..

...trotzdem werden immer Fragezeichen ausgegeben statt der beknackten QUotes-unten.

Ich habe Deinen Vorschlag übernommen - und noch ein ' ergänzt.

Mein PHP sieht jetzt so aus:

PHP-Code:
<?php

/*error_reporting( -1 );
ini_set('display_errors', TRUE);
*/
define('CHARSET''UTF-8');
$data file_get_contents('http://www.sz-online.de/sachsen/');
$data utf8_decode($data);

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

$xPath = new DOMXPath($doc);

$zaehler 0;
foreach (
$xPath->query('//h1/a') as $element
{    
   

     
$href $element->getAttribute('href');
     
$hreft "http://www.sz-online.de" $href;
     
$title $element->nodeValue
     
$search "„";
   
/*$title = $element->getAttribute('title');*/
        
str_replace ($search '"'$title);
str_replace ($search '"'$hreft);

If (
$zaehler <= 13)
    {

urlencode ($title);

echo 
"<li><a href=\"".htmlspecialchars($hreftENT_QUOTESUTF-8false)."\" target=\"_blank\">".htmlspecialchars($titleENT_QUOTESfalse)."</a></li>\n"


                 
$zaehler++;
           }
    }  


?>


</ul> 

  </div>
Habe ich noch was übersehen? Ich verstehe nicht, dass er doch alles andere offenbar korrekt in utf-8 ausgibt und nur diese Anführungzeichen nicht. Gibt es denn keinen Weg, diese speziellen Zeichen zu ersetzen?

Gruß
newbie1955
Mit Zitat antworten
  #13 (permalink)  
Alt 20-04-2013, 18:35
newbie1955
 Registrierter Benutzer
Links : Onlinestatus : newbie1955 ist offline
Registriert seit: Dec 2012
Beiträge: 241
newbie1955 befindet sich auf einem aufstrebenden Ast
Standard Das war's

Zitat:
Zitat von mephisto111 Beitrag anzeigen
Hallo,

wenn die Web-Seite UTF-8-kodiert ist, wird sie durch die zweite Zeile

$data = utf8_decode($data);

verstümmelt. Die Gänsefüßchen sind nämlich gar kein Bestandteil von ISO-8859-1. Kurz: "utf8_decode" ist nur dann (möglicherweise) sinnvoll, wenn man sicher ist, dass alle vorkommenden Zeichen auch in ISO-8859-1 dargestellt werden können.

hallo, mephisto, danke, das war's, obwohl ich es nicht so ganz nachvollziehen kann, wie das kam, denn das utf8_decode, war ja ein Versuch, die von Beginn an ausgegebenen Fragezeichen "loszuwerden". Naja, es funktioniert jedenfalls. Danke!
Mit Zitat antworten
  #14 (permalink)  
Alt 20-04-2013, 18:35
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.595
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Wie mephisto schon geschrieben hat: utf8_decode() ändert alle Zeichen, die nicht im ISO-8859-1 Zeichensatz vorkommen, in ein Fragezeichen. Was soll sie auch sonst tun? Das ist ihr definiertes Verhalten, das auch im PHP-Handbuch steht.

PHP-Code:
$pi 'π';

echo 
$pi// π
echo utf8_decode($pi); // ? 

Geändert von h3ll (20-04-2013 um 18:41 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 20-04-2013, 22:46
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
PHP-Code:
echo "<li><a href=\"".htmlspecialchars($hreftENT_QUOTESUTF-8false)."\" target=\"_blank\">".htmlspecialchars($titleENT_QUOTESfalse)."</a></li>\n"
Noch eine Kleinigkeit, UTF-8 wird wie ein String mit Anführungszeichen notiert.

Zitat:
[..., string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )
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 18:35
[REGEX] Mal wieder RegEx-Probleme Luke PHP Developer Forum 24 04-12-2003 11:57
Mal wieder!!! Roninreneo PHP Developer Forum 2 09-04-2003 00:43
hosteurope hat mal wieder Probleme Berni Provider / Domains 9 13-09-2002 09:19
Einer Variablen den ersten Char kürzen / char 2 - xxx entnehmen Phish PHP Developer Forum 6 10-11-2001 16: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

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:56 Uhr.