|
|
|
|
|
для: antf
(29.01.2005 в 19:44)
| | Про квадратики и методы борьбы с ними вот ещё интересная ссылка...
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=320 | |
|
|
|
|
|
|
|
для: cheops
(29.01.2005 в 19:18)
| | Очень благодарен за подробный ответ. Теперь понятно откуда берутся в блокноте квадратики, когда я пытаюсь открыть XML-файл, собранный средствами PHP - оказывается он, такой нехороший, отказывается воспринимать символы перевода строки "\n" :( | |
|
|
|
|
|
|
|
для: antf
(29.01.2005 в 18:38)
| | 1) В UNIX перевод строки осуществляется символом \n, в Windows для этого к переводу строки следует добавить возврат каретки \r\n. Зачем это сделали никто толком объяснить не может, как в прочем и зачем в Windows для разделения директорий по умолчанию используется обратный слеш \ вместо прямого /. Поэтому если в UNIX-подобной системе открыть файл созданный в Windows он весь обезображен символами \r - если их убрать в блокноте всё сольётся в одну строку, не смотря на то, что строки будут разделены \n. Радует, что другие редакторы нормально обрабатывают \n без \r, и из-за того, что подавляющее большинство человек работают под windows и реально проблемы из-за этих разночтений редко бывают. Хотя следует помнить, что если данные пришили с windows-машины - строки разделены \r\n, а если файл создан PHP, то \n. В файловых вариантах Web-приложений при поиске бывает много подводных камней в связи с этим...
2) В С строки это не строки, а массивы символов, последний элемент в которых является нуль-байтом. Поэтому там легко вылезти за границу строки (на этом основано ряд атак по переполнению буффера, когда в строку дописывается бинарный код который размещается после границы массива и изменяет бинарную логику приложения (например Web-сервера), но для их реализации нужно уметь виртуозно программировать). В PHP это не так актуально - здесь строка резиновая, с увеличением размера содержимого она автоматически увеличивается в размере. В С об этом нужно заботится самостоятельно. Например, мы выделяем под строку 200 байт, а содержимое стоки занимает 10, для того, чтобы сообщить что в строке только 10 байт мы в 11 записываем нуль-байт... Очень удобно обрезать строку - достаточно просто записать нуль-байт в середине строки и она автоматически укорачивается...
3) Это просто ASCII-символ (11 по счёту) - видимые симоволы начинаются с пробела (32 символ), а до этого полно управлющих символов, в том числе перевод строки \n (10 симовол), возврат каретки \r (13 символ) и много всякой другой бяки, которая исользовалась ранее и частично используется в настоящее время. Они просто так называются, разумеется большинство редакторов вертикальную табуляцию не поддерживают - ну зачем она нужна, когда можно поставить несколько пробелов, но можно и обработать - например, встретив такой символ делать перевод в три строки, только ни один программист этого делать сейчас не будет так как это будет пугать пользователей. | |
|
|
|
|
|
|
| Здраствуйте. Сейчас прочитал в мануале про особенности функции trim() и натолкнулся на несколько непонятных спецсимволов, назначение которых я бы хотел прояснить в данной теме:
1) Чем отличается символ возврата каретки ("\r") от символа перевода строки ("\n")?
2) Что такое нуль байт "\0" и где он используется?
3) Чем отличается вертикальная табуляция ("\x0B") от горизонтальной ("\t")?
Заранее спасибо за ответ. | |
|
|
|
|