2012-04-26 1 views
1

Update: Фигурная IT OUTтянущие данные из окна DOS Prompt

Ответ: я понял это.

После каждого символа был скрыт \ 0.

Исправление просто: выход

trim(str_replace("\0", '', $string)) 

ASCII:

|0()|84(T)|0()|104(h)|0()|101(e)|0()|32()|0()|110(n)|0()|117(u)|0()|109(m)|0()|98(b)|0()|101(e)|0()|114(r)|0()|32()|0()|111(o)|0()|102(f)|0()|32()|0()|112(p)|0()|101(e)|0()|110(n)|0()|100(d)|0()|105(i)|0()|110(n)|0()|103(g)|0()|32()|0()|100(d)|0()|101(e)|0()|118(v)|0()|105(i)|0()|99(c)|0()|101(e)|0()|40(()|0()|115(s)|0()|41())|0()|32()|0()|105(i)|0()|115(s)|0()|32()|0()|48(0)|0()|46(.)|0()|13(
)|0()| 

Вопрос:

Вот хороший пример строки я тестирую с:

$ string = "Количество ожидающих устройств (устройств) равно 1.";

строка (73) «Количество отложенных устройств (ов) - 1."

Код я пытаюсь запустить это:

$string = "the number of pending device(s) is 1."; 
if(strstr($string, "pending")) 
{ 
    echo "Found"; 
} 

Еще один я был тестирование:

$text = "The number of pending device(s) is 1."; 
     $re1='.*?'; # Non-greedy match on filler 
     $re2='(?:[a-z][a-z]+)'; # Uninteresting: word 
     $re3='.*?'; # Non-greedy match on filler 
     $re4='(?:[a-z][a-z]+)'; # Uninteresting: word 
     $re5='.*?'; # Non-greedy match on filler 
     $re6='(?:[a-z][a-z]+)'; # Uninteresting: word 
     $re7='.*?'; # Non-greedy match on filler 
     $re8='((?:[a-z][a-z]+))'; # Word 1 
     $re9='.*?'; # Non-greedy match on filler 
     $re10='(\\d+)'; # Integer Number 1 

     if ($c=preg_match_all ("/".$re1.$re2.$re3.$re4.$re5.$re6.$re7.$re8.$re9.$re10."/is", $text, $matches)) 
     { 
      $word1=$matches[1][0]; 
      $int1=$matches[2][0]; 
      print "($word1) ($int1) \n"; 
     } 

Теперь это прекрасно работает, если бы это было просто строка. Я вытаскиваю данные из приглашения Windows DOS, и я могу эхо-данные просто отлично, но, к сожалению, когда я пытаюсь запустить данные через preg_match_all или strpos или strstr, он всегда возвращает false. Может ли это быть проблемой кодирования? Все данные echos в браузере просто прекрасны.

Пожалуйста, помогите!

+0

Вы пытались явно преобразовать его в str? Я очень сомневаюсь, что это кодирование, поскольку я запускал некоторые серьёзные строки, не относящиеся к UTF8, через preg_match –

+1

Кроме того, я собираюсь предположить на основе вашего регулярного выражения, что ваш strstr() вызывает отсутствующие котировки - это опечатка –

+0

Если слово неинтересно, почему вы его ищете? Почему вам все равно, что это две буквы большие? Почему вы даже считаете слова? – hakre

ответ

0

Как показано на вашем примере, оба strstr() и preg_match_all() работают нормально. Таким образом, мы ничего не можем сделать, кроме спекуляций.

Поскольку это проблема с выводом оболочки, которую вы читаете, а ключ - это различие между этой строкой и тестовой, вам нужно отредактировать этот вопрос или задать новый запрос, поместив ваш код "потянув данные из Windows DOS prompt ".

Кроме того, «эхо в браузере» не является хорошим способом проверки строк. Попробуйте прочитать отдельные байты. (Обычно я использую цикл for, шестнадцатеричный редактор или утилиту захвата пакетов.)

+0

Это действительно странно, потому что я могу запустить strstr ($ string, "p") и вытащить данные перед этой строкой, но просто не эту строку. – ChrisG

+0

Пробел? Бессмысленно рассуждать о будущем - просто дайте нам код, демонстрирующий проблему. – aib

Смежные вопросы