2011-01-04 7 views
1

ich weiß nicht, was mit diesem PHP Code falsch:Sonderbare Problem String mit Newline in explodier

 
$sql = "CREATE TABLE test (
id mediumint(9) unsigned NOT NULL auto_increment, 
filenames text NOT NULL, 
meta longtext, 
added_date datetime NOT NULL default '0000-00-00 00:00:00', 
PRIMARY KEY (id) 
)"; 
var_export(explode("\n",$sql)); 

Der obige Code im Grunde die Zeichenfolge in $ sql mit Newline char explode ('\ n') und dann ausgegeben mit var_export. Ich habe einige PHP-Tests mit dem Code gearbeitet Datei aber nicht alle von ihnen zeigt, was ich hoffe, es wäre:

array (0 => 'CREATE TABLE test (', 
     1 => ' id mediumint(9) unsigned NOT NULL auto_increment, ', 
     2 => ' filenames text NOT NULL, ', 
     3 => ' meta longtext, ', 
     4 => ' added_date datetime NOT NULL default \'0000-00-00 00:00:00\', ', 
     5 => ' PRIMARY KEY (id) ', 6 => ') ;', 
)

einige diplaying Sie stattdessen:

 
array (0 => 'CREATE TABLE test (id mediumint(9) unsigned NOT NULL auto_increment, filenames text NOT NULL, meta longtext, added_date datetime NOT NULL default \'0000-00-00 00:00:00\', PRIMARY KEY (id)) ;',) 

Bekanntmachung der Unterschied? der zweite zeigt es an, da es keine neue Zeile gibt, um die Zeichenfolge zu explodieren. Ich verstehe nicht, was hier passiert. Weiß irgendjemand etwas?

+0

Ihr Redakteur wahrscheinlich verwendet '\ r' statt' \ n '. – Gumbo

+0

Wenn dies auf einem Windows-System ist, könnte es ein Wagenrücklauf sein oder wenn Sie die Ergebnisse auf einer Webseite anzeigen, könnte es ein html sein

+0

Ja, ich denke, das ist das Problem, aber es ist seltsam, dass mehrere PHP funktioniert Ich hoffe aber nicht den Rest, und das seltsamste von allem ist, dass die Testdateien alle im selben Verzeichnis sind. –

Antwort

3

Sie müssen flexibel sein mit was ein line feed aussieht. Sie können eine flexible explodieren:

preg_split("/[\r\n]+/", $sql) 

... oder Sie können normalisieren Linie in das Format Ihrer Wahl Feeds:

$sql = strtr($sql, array(
    "\r\n" => "\n", 
    "\r" => "\n", 
)); 
explode("\n",$sql) 

Es ist auch erwähnenswert, dass MySQL mehrere SHOW Aussagen bietet, die Ihnen erlauben um die nützlichsten Daten aus den Tabellendefinitionen zu holen. die SHOW CREATE TABLE Ausgang Parsen ist oft nicht nötig:

http://dev.mysql.com/doc/refman/5.1/en/show.html

+0

Was für eine großartige Lösung haben Sie dort. Vielen Dank. –

+0

Das funktioniert perfekt, danke für den Tipp –

1

Wurden alle Seiten auf demselben Computer erstellt? Der Zeilenendezeichencode ist für verschiedene Betriebssysteme unterschiedlich. Dies kann einer der folgenden sein: \n, \r und \r\n, je nachdem, ob das System Windows, Mac oder * nix ist. Sie können nach allen drei suchen.

+0

Ja, es ist in demselben Computer und demselben Verzeichnis auch. Ja, es hat gut funktioniert. Ich weiß nur, dass es tatsächlich vom Betriebssystem abhängt. Vielen Dank, und um das Problem zu lösen, werde ich mit Álvaro Methode oben gehen. –