Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
X30n
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 20
1

var_dump() типы данных, непонятная ситуация

20.02.2013, 15:34. Просмотров 1329. Ответов 7
Метки нет (Все метки)

В кратце, есть дата которую я парсил с одного сайта, и дата напечатанная вручную. Как думаете почему var_dump() выдает разное кол-во символов в них. При чем дату которая спарсенна не поддается ни strtotime() ни explode(), explode там например пробелов не видит. Как можно вытащить побольше инфы о строке?
Результаты var_dump
Это спарсенная: string(15) "14 march 2013" | Это напечатанна вручную string(13) "14 march 2013"
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2013, 15:34
Ответы с готовыми решениями:

Непонятная ситуация с многомерным массивом
Код довольно таки простой: $str = 'Я {самый|очень} хороший...

Непонятная ситуация с обработкой формы (POST)
Здравствуйте. В общем, на страничке есть форма с полем input, отправка данных...

Var_dump
Замучался вообщем, как искать проблему может кто подскажет? ...

Не работает var_dump
Посмотрите пожалуйста коды. Предполагается, что после введенных данных в форму...

Var_dump($_COOKIE[])
Здравствуйте столкнулся проблемой, кооторая загнала меня в тупик. Авария...

7
crautcher
2019 / 1991 / 463
Регистрация: 27.05.2011
Сообщений: 6,837
20.02.2013, 15:56 2
тримани запись
0
Vovan-VE
13161 / 6546 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
20.02.2013, 16:40 3
X30n, См. исходный код получившейся страницы, а не результат в браузере.
0
Dolphin
809 / 792 / 201
Регистрация: 21.09.2012
Сообщений: 2,640
20.02.2013, 16:49 4
возможно еще есть непечатаемый символ
0
X30n
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 20
20.02.2013, 19:30  [ТС] 5
crautcher, trim не помог

Vovan-VE, Ну конечно я смотрел исходный код страницы, там запись выглядит точно так же... Ну вот воспроизведу, такой код выдает вот это:
PHP
1
2
3
4
5
$dat1 = "14 марта 2013";
$dat2 = trim($info[0]['date']);
 
var_dump($dat1);
var_dump($dat2);
На странице в браузере так:
HTML5
1
string(18) "14 марта 2013" string(20) "14 марта 2013"
Если посмотреть исходный код страницы, там так:
HTML5
1
2
string(18) "14 марта 2013"
string(20) "14 марта 2013"
Добавлено через 11 минут
Если поднятся еще выше по коду и посмотреть откуда я собственно беру $info[0]['date'], там все вот так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Получаем страницу
$var = $curl->get_web_page('http://.......');
$site = $var['content'];
//Скармливаем ее phpQuery
$document = phpQuery::newDocumentHTML($site, $charset='utf-8');
 
//Обрабатываем данные, забираем нужное нам
foreach ($document as $element){
  $title = pq($element)->find('.moviename-big:first');
  $title = pq($title)->text();
 
  $date = pq($element)->find('.dvd > div > a:first');
  $date = pq($date)->html();
 
  $text = pq($element)->find('.brand_words:first');
  $text = pq($text)->text();
  $info[] = array('title' => $title, 'date' => $date, 'text' => $text);
}
0
Vovan-VE
13161 / 6546 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
21.02.2013, 16:25 6
Тогда так их всех:
PHP
1
echo bin2hex($dat1), ", ", bin2hex($dat2);
0
X30n
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 20
21.02.2013, 17:23  [ТС] 7
Я на другом форуме разобрался с проблеммой, вроде тут ссылки давать незя, но вкратце проблемма была в следующем. Сайт с которого грабил внедрил вместо пробела ASCII символ #160 из кодировки cp1251, который, цитирую:
Этот загадочный символ #160 из кодировки cp1251 - хоть и выглядит, как пробел, но на самом деле пробелом не является. Регулярки его не воспринимают как пробельный символ. Более того, сам PHP его воспринимает как обычный символ. Например, такой код будет успешно работать:

PHP
1
2
3
4
<?php
$var name = '123';
echo $var name;
?>
Если между $var и name разместить этот самый 0xA0, а не обычный пробел. То есть этот загадочный "пробел" можно использовать в названиях переменных и функций. Так можно создавать дополнительную путаницу в исходниках, если нужно усложнить читабельность кода. Есть ещё ряд подобных необычных символов.
Вот так получилось от него избавится
PHP
1
$str = str_replace("\xA0", ' ', $str);
0
Vovan-VE
13161 / 6546 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
21.02.2013, 18:18 8
Это не "загадочный", а вполне обычный неразрывный пробел. Вы можете его получить в HTML с помощью кода &nbsp; .
Цитата Сообщение от X30n Посмотреть сообщение
Регулярки его не воспринимают как пробельный символ
В UTF-8 воспринимают:
PHP
1
2
var_dump(preg_match('/^\\s$/u', "\xC2\xA0"));
// int(1)
Цитата Сообщение от X30n Посмотреть сообщение
сам PHP его воспринимает как обычный символ
PHP вообще любые байты с кодом 128-255 (0x80-0xFF) считает валидными символами для имён. Неразрывный пробел попадает туда как в CP1251, так и в UTF-8.

Есть и другие пробелы. Наприме: U+3000hex.
1
21.02.2013, 18:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2013, 18:18

Var_dump ограничение в 256 элементов
Всем привет, при отладке кода часто пользуюсь var_dump(); но мой OpenServer...

Var_dump() помогает вывести значение поля
$rFrom = new datetime('first day of 2 month 00.00.00'); echo &quot;&lt;pre&gt;&quot;; ...

Var_dump($_COOKIE['user']) выводит array
if(isset($_COOKIE)){ header('Location: http://x/main.php'); }else{...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru