如何从字符串中删除NULL字符

时间:2009-03-13 12:23:37

标签: php

我有一个PHP变量,其中包含一个表示XML结构的字符串。这个字符串包含非法字符,不允许我从字符串构建一个新的SimpleXMLElement对象。我没有办法要求内容的来源修改他们的响应,所以我需要在创建SimpleXMLElement对象之前对此字符串执行一些清理。

我认为导致问题的字符是 (0x00(00)HEX)字符,它位于此字符串XML的一个文本节点中。

删除此字符或可能破坏SimpleXMLElement对象的其他字符的最佳方法是什么。

3 个答案:

答案 0 :(得分:48)

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

将替换$text字符串中的所有空字符。如果要进行多次替换,还可以为前两个参数提供数组。

答案 1 :(得分:9)

trim()还将从源字符串的任一端(但不在其中)中删除空字符。

$text = trim($text);

我发现这对套接字服务器通信非常有用,特别是在传递JSON时,因为空字符导致json_decode()返回null。

答案 2 :(得分:-1)

虽然它可能不是您问题的主要目标,但请查看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";    
}

结果:

  

此(a)已清理的电子邮件地址被视为有效。

     

此(b)已清理的电子邮件地址被视为无效

     

此(C)已清理的电子邮件地址被视为有效。

     

之前:(bogus@example.org)

     

之后:bogus@example.org