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-02-2008, 14:27
iberican
 Newbie
Links : Onlinestatus : iberican ist offline
Registriert seit: Dec 2005
Beiträge: 76
iberican ist zur Zeit noch ein unbeschriebenes Blatt
Standard mysql_real escape ohne gewünschtes Ergebnis

Hallo Community,
ich ärgere mich nun seit Wochen mit der Problematik von Sonderzeichen.
Ich parse ein xml Dokument und will es in eine mysql Tab. schreiben. In dem Dokument sind viele Sonderzeichen als auch Steuerzeichen. Das Parsen funktioniert einwandfrei,
wenn ich mir die Variablen mit den geparseten Inhalten ausgeben
lasse sieht alles sehr schön aus, doch sobald ich in die db schreibe sind z.bsp. einfache Anführungszeichen falsch ( ’ ) als auch Steuerzeichen.

Habe mir dann mal den insert Befehl ausgeben lassen und mit query browser eingefügt,
auch hier werden dann alle Zeichen korrekt angezeigt.

PHP-Code:
function seems_utf8($Str) {
 for (
$i=0$i<strlen($Str); $i++) {
  if (
ord($Str[$i]) < 0x80) continue; # 0bbbbbbb
  
elseif ((ord($Str[$i]) & 0xE0) == 0xC0$n=1# 110bbbbb
  
elseif ((ord($Str[$i]) & 0xF0) == 0xE0$n=2# 1110bbbb
  
elseif ((ord($Str[$i]) & 0xF8) == 0xF0$n=3# 11110bbb
  
elseif ((ord($Str[$i]) & 0xFC) == 0xF8$n=4# 111110bb
  
elseif ((ord($Str[$i]) & 0xFE) == 0xFC$n=5# 1111110b
  
else return false# Does not match any model
  
for ($j=0$j<$n$j++) { # n bytes matching 10bbbbbb follow ?
   
if ((++$i == strlen($Str)) || ((ord($Str[$i]) & 0xC0) != 0x80))
    return 
false;
  }
 }
 return 
true;
}

function 
utf8_ensure($str) {
    return 
seems_utf8($str)? $strutf8_encode($str);
}

....
hier wir geparsed


                        $entry_title 
mysql_real_escape_string(utf8_ensure($item->get_title()));
                        
$entry_description mysql_real_escape_string(utf8_ensure($item->get_description()));
                        
$entry_content mysql_real_escape_string(utf8_ensure($item->get_content()));
                    
                        
$entry_date strftime('%Y-%m-%d',$item->get_date());
                        if(
$entry_date == "1970-01-01")
                            
$entry_date=date('Y-m-d');
                    
#echo $encoding."<br>".$entry_date."<br>".$item->get_link()."
<br>".$entry_title."<br>".$entry_description."<br><hr>";                
                    echo "
$entry_title<br";
                    #exit;
                    
$query = "
INSERT INTO blog_items_copy
(id,blog_id,blog_item_url,blog_item_title,blog_item_date,blog_item_desc,blog_item_content,run_date)
VALUES 
('','".$feed_ids[$i]."''".$item->get_link()."''".$entry_title."','".$entry_date."','".$entry_description."','".
$entry_content."'
,NOW())
                    
";
                    
                    echo $query;
                        if(strlen($query) > 1) {
                            mysql_query($query);
                        } 
Um der Sache auf den Grund zu gehen habe ich mittels ngrep mir mal angeschaut, was überhaupt gesendet wird.
Und da sind Anführungszeichen auch nur als "..." dargestellt. Irgendwas scheint mit dem insert nicht zu stimmen.
Php läuft auf der Kommandozeile mit charset utf8 als auch mysql mit utf8. Ich bin mittlerweile ratlos und freue mich über eure Hilfe.

Geändert von iberican (20-02-2008 um 14:30 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 20-02-2008, 14:56
iberican
 Newbie
Links : Onlinestatus : iberican ist offline
Registriert seit: Dec 2005
Beiträge: 76
iberican ist zur Zeit noch ein unbeschriebenes Blatt
Standard

wie es der Zufall will stoße ich gerade auf

PHP-Code:
mysql_query("SET NAMES utf8"); 
und es funktioniert. Kann mir jmd. erklären wozu das nötigt ist, alle Laufzeitvariablen meines mysql servers sind auf utf8
Mit Zitat antworten
  #3 (permalink)  
Alt 20-02-2008, 15:57
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Die Query setzt den Zeichensatz der Verbindung deines Skriptes mit der Datenbank auf UTF-8. Standard ist glaube ich ISO-8859-1, wodurch alle Inhalte von der DB entsprechend konvertiert werden. Mit set names legst du diesen Zeichensatz neu fest!
Mit Zitat antworten
  #4 (permalink)  
Alt 20-02-2008, 16:17
iberican
 Newbie
Links : Onlinestatus : iberican ist offline
Registriert seit: Dec 2005
Beiträge: 76
iberican ist zur Zeit noch ein unbeschriebenes Blatt
Standard

thx,habe ich mittlerweile rausgefunden. doch sauber ist diese lösung nicht, ich will das nicht über den client steuern.
in der doku von mysql heißt es man soll in der my.cnf
unter [crond] folgenden eintrag machen
Code:
init-connect='SET NAMES utf8'
weiter habe ich dort
Code:
SET NAMES utf8;
SET CHARACTER_SET utf8;
hat alles nicht funktioniert (habe neu gestartet)
dann habe ich es selbst unter [client] eingetragen und es tut nicht.

ich weiß wirklich nicht mehr an welchem rädchen ich noch drehen kann...
thx for help
Mit Zitat antworten
  #5 (permalink)  
Alt 20-02-2008, 16:36
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Afaik kannst du das nur so machen! Das Senden einer solchen Query ist aber auch viel portabler, als in den Datenbankkonfigurationen rumzuwerkeln!
Mit Zitat antworten
  #6 (permalink)  
Alt 20-02-2008, 16:50
iberican
 Newbie
Links : Onlinestatus : iberican ist offline
Registriert seit: Dec 2005
Beiträge: 76
iberican ist zur Zeit noch ein unbeschriebenes Blatt
Standard

so nach nach weiterem werkeln die lösung

Code:
# client
[client]
default-character-set=utf8
port            = 3306
socket          = /tmp/mysql.sock

# The MySQL server
[mysqld]
init-connect='SET NAMES utf8'
skip-character-set-client-handshake
der handshake eintrag ist wichtig.

@desaster. du hast schon recht. aber so eine global config des servers bevorzuge ich, da werden dann meine kollegen nicht mit dem gleich problem konfrontiert..
Mit Zitat antworten
  #7 (permalink)  
Alt 20-02-2008, 16:58
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
du hast schon recht. aber so eine global config des servers bevorzuge ich, da werden dann meine kollegen nicht mit dem gleich problem konfrontiert..
Ok, das stimmt natürlich. Hängt immer vom Einsatzbereich ab. Wenn ihr jetzt eure Software vertreiben würdet, wäre der andere Weg der bessere
Mit Zitat antworten
  #8 (permalink)  
Alt 20-02-2008, 17:03
iberican
 Newbie
Links : Onlinestatus : iberican ist offline
Registriert seit: Dec 2005
Beiträge: 76
iberican ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ja allerrdings das leuchtet ein. ist aber in diesem fall nur ein developer server. trotzdem muss ich sagen, war das äußerst tricky. war lange zeit von einer falschen php config ausgegagen
Mit Zitat antworten
  #9 (permalink)  
Alt 20-02-2008, 17:24
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
function utf8_ensure($str) {     return seems_utf8($str)? $strutf8_encode($str); } 
Geht auch einfacher: mb_detect_encoding
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
  #10 (permalink)  
Alt 20-02-2008, 18:29
iberican
 Newbie
Links : Onlinestatus : iberican ist offline
Registriert seit: Dec 2005
Beiträge: 76
iberican ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ah jetzt ja. kannte ich nicht... thx
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

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 00:33 Uhr.