我有一个PHP变量,其中包含一个表示XML结构的字符串。这个字符串包含非法字符,不允许我从字符串构建一个新的SimpleXMLElement对象。我没有办法要求内容的来源修改他们的响应,所以我需要在创建SimpleXMLElement对象之前对此字符串执行一些清理。
我认为导致问题的字符是 (0x00(00)HEX)字符,它位于此字符串XML的一个文本节点中。
删除此字符或可能破坏SimpleXMLElement对象的其他字符的最佳方法是什么。
答案 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