[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не могу найти PHP_EOL в $POST от textarea
GET
Собственно вопрос в теме.

Не могу понять, пишу в textarea несколько строк каждую с новой строки...ну ENTER жму. На выходе ловлю:

			if(strstr($_POST['test'],PHP_EOL))echo'!';
else echo'E';


пишет Е??? Почему-то...но если тут же $_POST['test'] вставить внутрь textarea он вставляет с переносами, как и нужно.

Почему так?

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET
Как бы разобрался:

	if(strstr($_POST['test'],"\n"))echo'!';
else echo'E';


Теперь не понятно какого не работает PHP_EOL?

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET
echo ord(PHP_EOL);//13


Перевод строки : 10

Возврат каретки: 13

Ну и как же быть тогда? :) Почему не пишется возврат каретки он же есть.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET
Короче пришел к выводу, что возврат каретки теряется во время AJAX запроса, когда вытаскиваю значение из textarea:

document.getElementById("id").value;


JS не вытаскивает возврат каретки.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
lans8097
Цитата (ABC @ 18.10.2013 - 02:32)
Короче пришел к выводу, что возврат каретки теряется во время AJAX запроса, когда вытаскиваю значение из textarea:

document.getElementById("id").value;

Ну так проверьте на уровне клиента что на самом деле уходит в заголовок.
Я вот сижу и не магу понять зачем вы это делаете
Для каких целей вам это надо ?
GET
lans8097
Ну дак я проверил что не приходит, нашел вот теперь место где теряется...

нужно это чтоб на основе строк из техтареа построить через аякс запрос тестовый селект из этих строк...в обработчике айкса использую:

$temp=explode(PHP_EOL,$_POST['selects']);


Вот сюда не приходят PHP_EOL

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
kaww
PHP_EOL - символ конца строки в платформе на которой запущен пхп. Это совсем не означает, что на клиенте он такой же.
preg_split( "/\r\n|\r|\n/", $string );
GET
kaww
Да...точно, спасибо.
Но все равно не понимаю до конца:

Перенос строки в тектареа (от => Браузера) это 2 символа:
1. Возврат коретки - код 13
2. Новая строка - код 10

Ведь это разные символы...ну да эффект для юзера не заметен, но все же почему на одном и том же компе в том же браузере его ядро JS берет инфу из текстареа и пропадает Возврат коретки?

Кстатит если вдруг кому интересно аналоги пэхэпэшных strstr и ord в JS, которыми пользовался:

function strstr( haystack, needle, bool ) {	// Find first occurrence of a string
//
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)


var pos = 0;

pos = haystack.indexOf( needle );
if( pos == -1 ){
return false;
} else{
if( bool ){
return haystack.substr( 0, pos );
} else{
return haystack.slice( pos );
}
}
}

function ord( string ) { // Return ASCII value of character
//
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)


return string.charCodeAt(0);
}


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Игорь_Vasinsky
Цитата
preg_split( "/\r\n|\r|\n/", $string );

к чему такое чудо, когда

$temp=explode(PHP_EOL,$_POST['selects']);

с этим прекрасно справляется?

PHP_EOL на разных платформах - сама знает что нужно содержать, либо \r либо \r\n

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
bestxp
Цитата (Игорь_Vasinsky @ 18.10.2013 - 07:51)
Цитата
preg_split( "/\r\n|\r|\n/", $string );

к чему такое чудо, когда

$temp=explode(PHP_EOL,$_POST['selects']);

с этим прекрасно справляется?

PHP_EOL на разных платформах - сама знает что нужно содержать, либо \r либо \r\n

как раз таки у него верное решение, PHP_EOL не знает, в этой константе сожержиться информация о способе переноса строки в конкретной ОС где запускается интерпретатор.

Можешь сам проверить на разных ос это дело
Игорь_Vasinsky
кстати

PHP_EOL (string)
Корректный символ конца строки, используемый на данной платформе. Доступна начиная с версии PHP 4.3.10 и PHP 5.0.2

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
GET
Игорь_Vasinsky
Дело в том, что в моем случае содержимое вытаскивается из textarea js`ом браузера и отправляется на сервер, который с радостью ищет там PHP_EOL и не находит, потому, что ***** js, как я понял, теряет символ конца строки, а использует только символ начала строки.

Если сделать тоже самое обычным submit формы, то
$temp=explode(PHP_EOL,$_POST['selects']);

прекрасно сработает, только что проверял.

Проблема только с AJAX`ом. Но с костылем:
preg_split( "/\r\n|\r|\n/", $string ); 
предложенным kaww все прекрасно работает.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.