Странная проблема взрыва строки с новой строкой - PullRequest
1 голос
/ 04 января 2011

Я не знаю, что не так с этим кодом PHP:

$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));

Приведенный выше код в основном разбивает строку в $ sql с помощью символа новой строки char ('\ n'), а затем выводит ее, используя var_export У меня есть файл PHP-тестов для работы с кодом, но не все из них отображают то, что, я надеюсь, будет:

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 => ') ;', 
)

вместо этого немного:

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) ) ;', )

заметили разницу? второй отображает его, так как нет новой строки для взрыва строки. Я не понимаю, что здесь происходит. Кто-нибудь знает что-нибудь, может быть?

Ответы [ 2 ]

3 голосов
/ 04 января 2011

Вы должны быть гибкими с тем, как выглядит line feed. Вы можете сделать гибкий взрыв:

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

... или вы можете нормализовать перевод строки в выбранный вами формат:

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

Стоит также отметить, что MySQL предлагает несколько операторов SHOW, которые позволяют извлекать наиболее полезные данные из определений таблиц. Разбор вывода SHOW CREATE TABLE часто не требуется:

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

1 голос
/ 04 января 2011

Были ли все страницы созданы на одном компьютере?Код символа окончания строки различен для разных операционных систем.Это может быть одно из следующих значений: \n, \r и \r\n, в зависимости от того, является ли система Windows, Mac или * nix.Вы можете проверить все три.

...