Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> echo и спецсимволы, Различный результат для разных хостов 
V
    Опции темы
PRIZRAK001
Дата 15.4.2009, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 13.7.2005

Репутация: нет
Всего: 1



Здравствуйте.

Исходный код:
Код

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=windows-1251"/>
    </head>
    <body>
        <?
            $str = "AAA_\0_BBB";            
            echo $str;                
        ?>
    </body>
</html>


При срабатывании на одном хосте выводит:
Код

AAA_?_BBB


При срабатывании на другом хосте:
Код

AAA_ _BBB


Во втором случае нуль был заменён на пробел. Необходимо избавиться от этой нежелательной подстановки. 

Подскажите, как это сделать? 


PM   Вверх
dstorm81
Дата 15.4.2009, 10:45 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


бездельник
***


Профиль
Группа: Завсегдатай
Сообщений: 1178
Регистрация: 18.1.2006
Где: (16RU)

Репутация: 1
Всего: 39



смотрел с одной машины и одного браузера?
есть предположение что сферический вакуумный конь пришел в гости к заголовкам и кодировкам smile


--------------------
на форуме с 8.12.2002 (http://forum.vingrad.ru/index.php?act=ST&f=10&t=4874&st=0#)

PM   Вверх
PRIZRAK001
Дата 15.4.2009, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 13.7.2005

Репутация: нет
Всего: 1



Цитата(dstorm81 @  15.4.2009,  10:45 Найти цитируемый пост)
смотрел с одной машины и одного браузера?

Я смотрел с разных машин и использовал разные браузеры. Во всех случаях нуль заменялся на символ пробела. 
PM   Вверх
dstorm81
Дата 15.4.2009, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


бездельник
***


Профиль
Группа: Завсегдатай
Сообщений: 1178
Регистрация: 18.1.2006
Где: (16RU)

Репутация: 1
Всего: 39



а если искправить тут
<meta http-equiv="Content-Type" content="text/html;charset=windows-1251"/>
на utf-8
сам файлик СОХРАНИТЬ в utf-8 без bom
и насильно установить хеадер для отдачи файла с utf-8 

что на это скажете?




--------------------
на форуме с 8.12.2002 (http://forum.vingrad.ru/index.php?act=ST&f=10&t=4874&st=0#)

PM   Вверх
NLspieler
Дата 15.4.2009, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



А ты не пробовал писать это 
 $str = "AAA_\0_BBB"; 
в одинарных ковычках?
 $str = 'AAA_\0_BBB';

PM MAIL   Вверх
bars80080
Дата 15.4.2009, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



кстати, а что должно выводиться по замыслу топикстартера?
PM MAIL WWW   Вверх
InvalidProperty
Дата 16.4.2009, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: 2
Всего: 9



эм... зачем терминатор нулевой? для php. Присоединяюсь к предыдущему оратору

Это сообщение отредактировал(а) InvalidProperty - 16.4.2009, 09:24


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
PRIZRAK001
Дата 16.4.2009, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 13.7.2005

Репутация: нет
Всего: 1



Цитата(bars80080 @  15.4.2009,  17:47 Найти цитируемый пост)
кстати, а что должно выводиться по замыслу топикстартера? 

Должен печататься первый вариант: 
Код
AAA_?_BBB


Цитата(InvalidProperty)
эм... зачем терминатор нулевой? для php. Присоединяюсь к предыдущему оратору

Для тестирования. Чтобы проверить, что бинарные данные передаются корректно.

Вопрос решён! Необходимо прописать в настройках Apache 
Код
CharsetDisable on

Это особенность русского Apache.

Всем спасибо!



Это сообщение отредактировал(а) PRIZRAK001 - 16.4.2009, 10:00
PM   Вверх
ksnk
Дата 16.4.2009, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Бинарные данные в текстовый html?
Кого хакаем?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
InvalidProperty
Дата 16.4.2009, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: 2
Всего: 9



Цитата(PRIZRAK001 @  16.4.2009,  09:51 Найти цитируемый пост)
Для тестирования. Чтобы проверить, что бинарные данные передаются корректно.

а почему такая уверенность в том, что если подставляется пробел, то данные передались некорректно?


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
PRIZRAK001
Дата 18.4.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 13.7.2005

Репутация: нет
Всего: 1



Цитата(ksnk @  16.4.2009,  10:11 Найти цитируемый пост)
Бинарные данные в текстовый html?
Кого хакаем? 

Цитата(InvalidProperty @  16.4.2009,  10:29 Найти цитируемый пост)
а почему такая уверенность в том, что если подставляется пробел, то данные передались некорректно? 

Пример, который я привёл - вымышленный. На самом деле, у меня происходила ошибка, когда загружались картинки на сервер. Данные отправлялись на сервер с помощью специальной программы, а там уже извлекались из переменной $GLOBALS['HTTP_RAW_POST_DATA'].  Было замечено, что все нули в файлах были заменены на пробелы. То есть во всём файле байт 00000000 (нуль) был заменён на байт 00100000 (пробел). В итоге бинарные данные оказывались повреждёнными. А на текстовые это не влияло.

Потом я заметил, что подобная подстановка возникает в строках. Специально привёл простой пример, чтобы упростить задачу и быстрее разобраться.
PM   Вверх
ksnk
Дата 18.4.2009, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата

Было замечено, что все нули в файлах были заменены на пробелы. 
Обычно это характерно для "русского Апача". Но несложно настроить и для любого другого *Charset*-параметрами... Выковырять конфигурацию сервера и проверить. 
Простейшее лечение - вставить в .htaccess строку 
Код

CharsetRecodeMultipartForms off

Возможно, есть параметр, который разрешает/запрещает и перекодировку вывода 



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0787 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.