【问题标题】:How can I remove the NULL character from string如何从字符串中删除 NULL 字符
【发布时间】:2010-10-13 03:34:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: php


    【解决方案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

    【讨论】:

      【解决方案2】:

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

      $text = trim($text);
      

      我发现这对于套接字服务器通信很有用,尤其是在传递 JSON 时,因为 null 字符会导致 json_decode() 返回 null。

      【讨论】:

      • 可能是一个旧答案,但最简单的解决方法是解决我在 json 调试输出中遇到 \u0000 的问题(转换为数组的异常,数组键包含 0 个字符。):)
      • trim 在尝试其他解决方案数小时后为我解决了这个问题。谢谢!
      【解决方案3】:
      $text = str_replace("\0", "", $text);
      

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

      【讨论】:

      • 取决于编码(utf-8),这可能会删除有效字符
      • @Johannes Rössel:我添加了 $text= 以使代码和文本匹配。 str_replace 不修改第三个参数
      • 代码似乎只在我这样做时才有效:$text = str_replace("", "", $text);
      • Benjamin:如果可行,那么您的问题可能不是空字符,而是未编码的 & 符号。但我希望能够从字符串构建 XML 节点以正确转义字符
      • strip_tags 函数具有去除空字符的作用,但它也去除了 HTML 标签。有时它可能是一个更好的选择(当你想删除 HTML 标签时)。
      猜你喜欢
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 2015-12-01
      • 1970-01-01
      相关资源
      最近更新 更多