#php #mysql #pdo #newline #text-rendering
#php #mysql #pdo #новая строка #рендеринг текста
Вопрос:
У меня установлены следующие даты и запрос:
create table test (
id int unsigned not null auto_increment primary key,
street1 varchar(32) not null default '',
street2 varchar(32) not null default '',
city varchar(32) not null default '',
state varchar(32) not null default '',
code varchar(32) not null default '',
country varchar(32) not null default ''
);
insert into test (street1, street2, city, state, code, country)
values ('44 Abc St', '', 'NYC', 'New York', '10016', 'United States');
select
concat_ws('n', NULLIF(street1, ''), NULLIF(street2, ''),
NULLIF(city, ''), NULLIF(state, ''),
NULLIF(code, ''), NULLIF(country, '')) o_address
from test
http://sqlfiddle.com /#!9/b919c4/3/0
Но каким-то образом PHP интерпретирует эту строку с дополнительными пробелами, как показано ниже: я уверен, что это происходит во время выборки, потому что протестировано на нескольких IDE MySQL, и запрос работает нормально.
44 Abc St
NYC
New York
10016
United States
Комментарии:
1. Как вы отображаете этот адрес?
2. Не могли бы вы предоставить полный фрагмент кода, воспроизводящий вашу ситуацию?
3. Это просто обычная выборка PDO, которая сразу же переходит на страницу.
4. Абсолютно ничего, что мне удалось воспроизвести. Вам нужно предоставить нам полный контекст. «Просто повторение», конечно, не приведет к появлению новых строк.
5. Я не использую какую-либо замену str или что-то еще, это просто связано с новыми строками, потому что если я использую только r (возврат каретки), то это работает нормально
Ответ №1:
Все это зависит от того, что вы используете для отображения строки «обычного текста», которую вы получаете из CONCAT_WS(). Из вашего вопроса невозможно понять, что это такое.
Вы сказали, что это не <pre>
тег в веб-браузере.
Вероятно, это не эмулятор терминала в стиле UNIX, потому что они рассматриваются n
как инструкция для перехода на первую позицию новой строки.
Возможно, это Win cmd.exe
или powershell.
Возможно, вам лучше всего использовать
WS_CONCAT( 'rn', whatever)
Эта двухсимвольная последовательность делает то, что вы хотите, в различных ситуациях.
Комментарии:
1. Привет, я сказал, что это обычный / текстовый тип содержимого, поэтому браузер отображает все новые строки, вкладки и пробелы. Также я сказал, что если я использую r, это работает нормально, хотя с n все то же самое для результата, проверяемого с помощью некоторых IDE MySQL, например, я использую DataGrip. Также я заявил, что использую расширение PDO, но не уверен, что что-то может быть связано с настройками. раньше этого не происходило, но началось несколько дней назад.
Ответ №2:
Похоже, что здесь определенно виноват ваш код; Я не могу воспроизвести поведение, которое вы описываете, используя….
$dbh=mysqli_connect('localhost', 'root');
$res=mysqli_query($dbh, $sql);
$data=mysqli_fetch_assoc($res);
var_export($data);
Это дает мне:
symcbean@hal9000 $ php -q test2.php
array (
'o_address' => '44 Abc St
NYC
New York
10016
United States',
И чтобы не было никаких сомнений в том, что я видел на экране (и что вы тоже должны были сделать) Я проверил, что записывается на экран:
symcbean@hal9000 $ php -q test2.php | xxd
00000000: 6172 7261 7920 280a 2020 276f 5f61 6464 array (. 'o_add
00000010: 7265 7373 2720 3d3e 2027 3434 2041 6263 ress' => '44 Abc
00000020: 2053 740a 4e59 430a 4e65 7720 596f 726b St.NYC.New York
00000030: 0a31 3030 3136 0a55 6e69 7465 6420 5374 .10016.United St
00000040: 6174 6573 272c 0a29 ates',.)
Комментарии:
1. Спасибо за ваше время 1st, а также то же самое показывает мне результат с новыми строками, за которыми следуют 8 символов пробела, единственное отличие в нашем коде заключается в том, что я использую модуль PDO. Создаст отдельные тестовые примеры и также опубликует код, чтобы вы могли быть уверены, что это то же самое