Как я могу удалить символ NULL из строки - PullRequest
18 голосов
/ 13 марта 2009

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

Я полагаю, что причиной проблемы является & # x0; (0x00 (00) HEX) и находится в одном из текстовых узлов этой строки XML.

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

Ответы [ 3 ]

48 голосов
/ 13 марта 2009
$text = str_replace("\0", "", $text);

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

9 голосов
/ 02 марта 2012

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

$text = trim($text);

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

0 голосов
/ 05 февраля 2014

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

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

$a = 'joe@example.org';
$b = 'bogus - at - example dot org';
$c = '(bogus@example.org)';

$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) санированный адрес электронной почты считается действительным.

До: (bogus@example.org)

После: bogus@example.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...