Подтвердить что ты не робот

Как удалить символ NULL из строки

У меня есть переменная PHP, содержащая строку, представляющую структуру XML. Эта строка содержит илегальные символы, которые не позволяют мне создавать новый объект SimpleXMLElement из строки. У меня нет способа попросить источник содержимого изменить их ответ, поэтому мне нужно выполнить некоторую очистку в этой строке, прежде чем я создам объект SimpleXMLElement.

I believe the character causing the problem is a (0x00 (00) HEX) character, and its located within one of the Text Nodes of this string XML.

Каков наилучший способ удалить этот символ или другие символы, которые могут сломать объект SimpleXMLElement.

4b9b3361

Ответ 1

$text = str_replace("\0", "", $text);

заменит все нулевые символы в строке $text. Вы можете также предоставить массивы для первых двух аргументов, если вы хотите сделать несколько замен.

Ответ 2

trim() также удалит нулевые символы с любого конца исходной строки (но не внутри).

$text = trim($text);

Я нашел это полезным для связи сокета-сервера, особенно при передаче JSON вокруг, поскольку нулевой символ вызывает json_decode() для возврата null.

Ответ 3

Хотя это, вероятно, не основная цель вашего вопроса, пожалуйста, посмотрите на функции фильтра PHP: http://www.php.net/manual/en/intro.filter.php

Функции фильтра проверяют и дезактивируют значения. Создайте сайт PHP:

$a = '[email protected]';
$b = 'bogus - at - example dot org';
$c = '([email protected])';

$sanitized_a = filter_var($a, FILTER_SANITIZE_EMAIL);
if (filter_var($sanitized_a, FILTER_VALIDATE_EMAIL)) {
    echo "This (a) sanitized email address is considered valid.\n";
}

$sanitized_b = filter_var($b, FILTER_SANITIZE_EMAIL);
if (filter_var($sanitized_b, FILTER_VALIDATE_EMAIL)) {
    echo "This sanitized email address is considered valid.";
} else {
    echo "This (b) sanitized email address is considered invalid.\n";
}

$sanitized_c = filter_var($c, FILTER_SANITIZE_EMAIL);
if (filter_var($sanitized_c, FILTER_VALIDATE_EMAIL)) {
    echo "This (c) sanitized email address is considered valid.\n";
    echo "Before: $c\n";
    echo "After:  $sanitized_c\n";    
}

Результат:

Этот (а) дезинфицированный адрес электронной почты считается действительным.

Этот (b) деактивированный адрес электронной почты считается недействительным.

Этот (C) дезинфицированный адрес электронной почты считается действительным.

До: ([email protected])

После: [email protected]