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 28-06-2007, 23:42
hamoda108
 Newbie
Links : Onlinestatus : hamoda108 ist offline
Registriert seit: Feb 2006
Beiträge: 25
hamoda108 ist zur Zeit noch ein unbeschriebenes Blatt
Standard UTF-8, header() und MySQL

Ich habe ein Problem mit UTF-8. Das Skript unten soll dieses Problem deutlich machen.
ich möchte Formulareingaben in eine MySQL-Datenbank eintragen. Wenn ich das Skript mit header("content-type: text/html; charset=utf-8"); beginne, werden nicht-ISO-8859-1-Zeichen verschlüsselt, so dass diese den Platz von zwei Zeichen einnehmen (z.B. wird aus Jürgen Müller Jürgen Müller). Abgesehen davon, dass das zu unleserlichen Feldinhalten in meiner MySQL-Datenbank führt (wenn ich die Inhalte z.B. über phpMyAdmin bearbeiten möchte), sprengt dieses Verhalten auch mein Größenlimit für die Tabellenspalte. Im Beispiel ist die Spalte für name auf 30 Zeichen begrenzt. Werden 30 nicht-ISO-8859-1-Zeichen in das Formular eingegeben, werden die letzten 15 abgeschnitten, da ja jedes Zeichen nun den doppelten Platzbedarf hat. Wenn ich header("content-type: text/html; charset=utf-8"); weglasse, tritt dieses Verhalten nicht auf, aber muss ich den Header nicht immer schicken?

2. Frage: Ist es richtig, dass man bei Dokumenten in UTF-8 nicht-ISO-8859-1-Zeichen nicht mehr durch HTML-Entities ersetzen muss?
Vielen Dank!

Code:
<?php
  header("content-type: text/html; charset=utf-8");
  $db = mysql_connect("localhost", "web007", "xyz");
  mysql_select_db("usr_web007_1", $db);
  echo "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>";
  echo "<html xmlns='http://www.w3.org/1999/xhtml' lang='de' xml:lang='de'>";
  echo "<head><title></title><meta http-equiv='content-type' content='text/html; charset=utf-8' /></head><body>";
  if ($_POST['senden']) {
    $name = trim($_POST['name']);
    if (!$name) $error[0] = " <span style='color:red'>Es wurde kein Name eingegeben!</span>";
    if (!$error) {
      $sql = "CREATE TABLE IF NOT EXISTS namen (
        id SERIAL,
        name VARCHAR(30)
      ) TYPE = MYISAM CHARACTER SET utf8";
      mysql_query($sql,$db);
      $sql = "INSERT INTO namen (name) VALUES ('$name')";
      mysql_query($sql,$db);
      echo "<p>Der Name ".stripslashes($name)." wurde eingetragen.</p>";
      //echo "<p>Der Name ".stripslashes(htmlentities($name, ENT_QUOTES, UTF))." wurde eingetragen.</p>";
      $sql = "SELECT * FROM namen WHERE id = ".mysql_insert_id();
      $res = mysql_query($sql,$db);
      $ds = mysql_fetch_array($res);
      echo "<p>Beweis: ".$ds['name']."</p>";
      //echo "<p>Beweis: ".htmlentities($ds['name'], ENT_QUOTES, UTF)."</p>";
      echo "<p><a href='test.php'>Weiterer Eintrag</a></p>";
    }
  }
  if (!$_POST['senden'] || $error) {
    echo "<form action='test.php' method='post'><div>";
    echo "<input type='text' maxlength='30' name='name' />".$error[0];
    echo "<br /><input type='submit' name='senden' value='Namen eintragen' /></div></form>";
  }
  echo "</body></html>";
?>
Mit Zitat antworten
  #2 (permalink)  
Alt 29-06-2007, 00:25
TBT
  Moderator
Links : Onlinestatus : TBT ist offline
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.787
TBT befindet sich auf einem aufstrebenden Ast
TBT eine Nachricht über ICQ schicken TBT eine Nachricht über AIM schicken TBT eine Nachricht über Yahoo! schicken
Standard

Du fügst ISO in die DB ein, und wunderst dich das es dann kaputt ist?
Schalte mal deine DB Verbindung auf utf-8 um, nach dem connect ein

(aus meinen Scripten)

PHP-Code:
        // auf UTF-8 schalten
        
if( defined'_FRM_MYSQL_UTF8_' ) ) {
            
$this->query'    SET CHARACTER_SET_CLIENT = utf8' );
            
$this->query'    SET CHARACTER_SET_RESULTS = utf8' );
            
$this->query'    SET COLLATION_CONNECTION = utf8_unicode_ci' );
            
$this->query'    SET NAMES utf8' );
        } 
zu 2: Ja
__________________
TBT

Die zwei wichtigsten Regeln für eine berufliche Karriere:
1. Verrate niemals alles was du weißt!


PHP 2 AllPatrizier II Browsergame
Mit Zitat antworten
  #3 (permalink)  
Alt 29-06-2007, 01:33
hamoda108
 Newbie
Links : Onlinestatus : hamoda108 ist offline
Registriert seit: Feb 2006
Beiträge: 25
hamoda108 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also mein Prolog sieht jetzt so aus:

PHP-Code:
  header("content-type: text/html; charset=utf-8");
  
$db mysql_connect("localhost""web007""xyz");
  if( 
defined'_FRM_MYSQL_UTF8_' ) ) {
    
$this->query'    SET CHARACTER_SET_CLIENT = utf8' );
    
$this->query'    SET CHARACTER_SET_RESULTS = utf8' );
    
$this->query'    SET COLLATION_CONNECTION = utf8_unicode_ci' );
    
$this->query'    SET NAMES utf8' );
  }
  
mysql_select_db("usr_web007_1"$db); 
Aber trotzdem bleibt es beim Fehler. Ich muss allerdings auch zugeben, dass ich überhaupt keinen Plan habe, was dein Skript bewirkt, vielleicht hab ich's nur falsch platziert...?
Mit Zitat antworten
  #4 (permalink)  
Alt 29-06-2007, 01:51
kuddeldaddeldu
 Registrierter Benutzer
Links : Onlinestatus : kuddeldaddeldu ist offline
Registriert seit: Sep 2006
Beiträge: 437
kuddeldaddeldu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

Du hast aber schon gesehen, dass TBT im Gegensatz zu Dir irgendeine Datenbank-Klasse benutzt?
Er wollte Dir damit nur die Queries zeigen, die er nach dem connect absetzt. Copy&Paste ist hier nicht angesagt!

LG
Mit Zitat antworten
  #5 (permalink)  
Alt 29-06-2007, 02:10
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Abgesehen davon ist das doppelt gemoppelt~
Die Kollation hat überhaupt keine Bewandtnis, kann man also weg lassen, und alles andere wird durch den SET NAMES-Query erledigt, d.h. statt allen vier Queries reicht auch nur der letzte
Mit Zitat antworten
  #6 (permalink)  
Alt 29-06-2007, 02:20
hamoda108
 Newbie
Links : Onlinestatus : hamoda108 ist offline
Registriert seit: Feb 2006
Beiträge: 25
hamoda108 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich freu mich ja schon, dass es ein paar leute mit ahnung von diesem thema gibt. leider verstehe ich nur bahnhof. macht das hier mehr sinn:

PHP-Code:
header("content-type: text/html; charset=utf-8");
$db mysql_connect("localhost""web007""xyz");
if (
defined('_FRM_MYSQL_UTF8_')) {
  
$sql "SET NAMES utf8";
  
mysql_query($sql,$db);

Mit Zitat antworten
  #7 (permalink)  
Alt 29-06-2007, 02:30
kuddeldaddeldu
 Registrierter Benutzer
Links : Onlinestatus : kuddeldaddeldu ist offline
Registriert seit: Sep 2006
Beiträge: 437
kuddeldaddeldu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,
Zitat:
macht das hier mehr sinn:
Tut sich denn was? Vermutlich nicht, es sei denn, Du hast eine Konstante _FRM_MYSQL_UTF8_ vorher definiert. Nimm die Bedingung raus.
Zitat:
leider verstehe ich nur bahnhof.
Dann fang mal mit Tutorials an, z.B. bei Peter oder bei Quakenet.

LG
Mit Zitat antworten
  #8 (permalink)  
Alt 29-06-2007, 02:42
hamoda108
 Newbie
Links : Onlinestatus : hamoda108 ist offline
Registriert seit: Feb 2006
Beiträge: 25
hamoda108 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ok, also mit

PHP-Code:
header("content-type: text/html; charset=utf-8");
$db mysql_connect("localhost""web007""xyz");
$sql "SET NAMES utf8";
mysql_query($sql,$db); 
klappts jetzt. vielen dank!

was hat es denn mit
PHP-Code:
if (defined('_FRM_MYSQL_UTF8_')) 
auf sich?
Mit Zitat antworten
  #9 (permalink)  
Alt 29-06-2007, 09:15
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

if (defined(...))
Mit Zitat antworten
  #10 (permalink)  
Alt 29-06-2007, 11:09
hamoda108
 Newbie
Links : Onlinestatus : hamoda108 ist offline
Registriert seit: Feb 2006
Beiträge: 25
hamoda108 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ja, vielen dank!

noch eine frage: ist in html-formularen die angabe von
Code:
accept-charset='utf-8'
notwendig? ich habe das lokal und auf einem entfernten server ausprobiert und konnte keinen unterschied feststellen, aber vielleicht ist das user-abhängig...
Mit Zitat antworten
  #11 (permalink)  
Alt 29-06-2007, 12:13
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von hamoda108
ist in html-formularen die angabe von accept-charset='utf-8' notwendig? ich habe das lokal und auf einem entfernten server ausprobiert und konnte keinen unterschied feststellen, aber vielleicht ist das user-abhängig...
Dass es allerhöchstens client-abhängig sein kann, sollte klar sein.

Und ja, es ist empfehlenswert, diese Angabe zu machen. Einige ältere Browser schicken sonst teilweise Murks.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #12 (permalink)  
Alt 29-06-2007, 12:20
hamoda108
 Newbie
Links : Onlinestatus : hamoda108 ist offline
Registriert seit: Feb 2006
Beiträge: 25
hamoda108 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

merci nach düdo

jetzt habe ich das problem, dass der entfernte server, auf dem das projekt liegt, nur die mysql version 4.1 installiert hat und die leute dort nicht wissen, wann sie updaten. also kein SET NAMES. gibt es eine alternative, die auch mit einer alten mysql version funktioniert?

Geändert von hamoda108 (29-06-2007 um 13:01 Uhr)
Mit Zitat antworten
  #13 (permalink)  
Alt 30-06-2007, 01:02
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Wurde SET NAMES nicht mit 4.1 eingeführt? Hast du es einfach mal versucht?

Letzte Alternative: Providerwechsel.
Mit Zitat antworten
  #14 (permalink)  
Alt 30-06-2007, 02:18
hamoda108
 Newbie
Links : Onlinestatus : hamoda108 ist offline
Registriert seit: Feb 2006
Beiträge: 25
hamoda108 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, hab's versucht, dadurch habe ich ja bemerkt, dass SET NAMES nicht funktioniert. Der Hoster hat mir das auch bestätigt. Providerwechsel steht wohl wirklich an. Verstehe nicht, wieso die nicht einfach updaten, wenn MySQL 5 schon 1,5 Jahre draußen ist. Kann doch kein so großer Aufwand sein... Kann mir aber auch irgendwie nicht vorstellen, dass UTF-8 Unterstützung erst seit MySQL 5 möglich ist. Hat da nicht jemand Erfahrungen mit älteren Versionen?

Stelle grade fest, dass php-resource.de seine Seiten in ISO-8859-1 verschickt und trotzdem keine HTML-Entites verwendet. Bin ja kein Apple-User, aber sollten die Sonderzeichen dort nicht falsch dargestellt werden? Oder haben die Betreiber dieser Seite einen Weg gefunden, Unicode-Zeichen OS-spezifisch auszugeben?
Mit Zitat antworten
  #15 (permalink)  
Alt 30-06-2007, 02:31
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Original geschrieben von hamoda108
Ja, hab's versucht, dadurch habe ich ja bemerkt, dass SET NAMES nicht funktioniert. Der Hoster hat mir das auch bestätigt.
Ich habe nachgesehen. Die Doku zu MySQL <= 4.1 erklärt die Verwendung von SET NAMES. Es ist also kein Versionsproblem, dein Provider muß nicht updaten sondern ggf. seine bzw. deine Konfiguration anpassen.
Mit Zitat antworten
Antwort

Lesezeichen


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

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 22:55 Uhr.