Невозможно преобразовать строку ob_get_clean () в целое число, говорит, что вывод представляет собой строку из 18 символов - PullRequest
2 голосов
/ 01 декабря 2011

Я пытаюсь получить число из функции, которая выводит только текст, а не возвращает его в переменную следующим образом:

ob_start();
function_to_get_id_number();
$thisIDnumber = ob_get_clean();

Если я выведу переменную $thisIDnumber, в выводе HTML будет напечатано нужное число.

Однако при запуске var_dump($thisIDnumber) выдается следующее: string (18) "7" (Предполагая, что число было 7, хотя var_dump () сообщает о 18-символьной строке независимо от того, какое число может быть.)

Любая попытка преобразовать строку в целое число (например, (int)$thisIDnumber, или int_val($thisIDnumber), или $thisIDnumber = 0+$thisIDnumber заканчивается неудачей, и вывод равен 0)

Выполнение mb_detect_encoding($thisIDnumber) сообщает, что строка должна быть закодирована в ASCII.

Я не совсем уверен, как обойти это, но был бы очень признателен за любые предложения или идеи! Большое спасибо заранее!

Ответы [ 2 ]

1 голос
/ 02 декабря 2011

Часть string(18) может быть объяснена, если функция печатает много пустого пространства (пробелы, табуляции или даже возврат каретки), и вы проверяете выходные данные var_dump () через веб-браузер (поэтому он отображает HTML и пробелы. разрушилась). Однако приведение к числу должно игнорировать обычные начальные пробелы. Так что, возможно, есть какой-то другой непечатный персонаж.

Попробуйте это:

ob_start();
function_to_get_id_number();
$thisIDnumber = ob_get_clean();

var_dump($thisIDnumber, bin2hex($thisIDnumber));

Шестнадцатеричный код должен дать вам подсказку о том, что внутри строки.

Обновление:

$data = '5b777073635f63617465676f72795f69645d';

for($i=0, $len=strlen($data); $i<$len; $i+=2){
    echo chr(hexdec(substr($data, $i, 2)));
}

... печатает это:

[wpsc_category_id]

: -

0 голосов
/ 01 декабря 2011

Вы не предоставили много информации для работы, так что это выстрел в темноте.

Почему бы вам не попробовать это: Если идентификатор является числовым по определению, примените его, удалив все остальное с помощью регулярного выражения.

(Как jproffit написал в своем комментарии к вашему вопросу: было бы неплохо получить дополнительную информацию о function_to_get_id_number(). Почему вам нужно сначала буферизовать вывод? Не могу function_to_... вернуть правильное значение вместо вывода строка?)

...