2009-03-13 33 views
16

Tôi có một biến PHP có chứa một chuỗi đại diện cho một cấu trúc XML. Chuỗi này chứa các ký tự ilegal không cho phép tôi xây dựng một đối tượng SimpleXMLElement mới từ chuỗi. Tôi không có một cách để yêu cầu nguồn của nội dung để sửa đổi phản ứng của họ, vì vậy tôi cần phải thực hiện một số làm sạch trên chuỗi này trước khi tôi tạo ra một đối tượng SimpleXMLElement.Làm thế nào tôi có thể loại bỏ các ký tự NULL từ chuỗi

Tôi tin rằng ký tự gây ra sự cố là ký tự (0x00 (00) HEX) và nằm trong một trong các nút văn bản của chuỗi XML này.

Cách tốt nhất để xóa ký tự này hoặc các ký tự khác có thể làm hỏng đối tượng SimpleXMLElement là gì.

Trả lời

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

sẽ thay thế tất cả các ký tự rỗng trong chuỗi $text. Bạn cũng có thể cung cấp mảng cho hai đối số đầu tiên, nếu bạn muốn thực hiện nhiều thay thế.

+0

tùy thuộc vào mã hóa (utf-8), điều này có thể loại bỏ ký tự hợp lệ –

+0

@ Johannes Rössel: Tôi đã thêm $ text = để tạo mã và kết hợp văn bản. str_replace không sửa đổi đối số thứ ba – phihag

+2

mã chỉ có vẻ hoạt động khi tôi thực hiện việc này: $ text = str_replace ("�", "", $ text); –

9

trim() cũng sẽ xóa các ký tự rỗng, từ một trong hai đầu của chuỗi nguồn (nhưng không nằm trong).

$text = trim($text); 

Tôi thấy điều này hữu ích cho giao tiếp máy chủ socket, đặc biệt khi truyền JSON xung quanh, vì ký tự null gây ra json_decode() để trả về giá trị rỗng.

+1

Có thể là một câu trả lời cũ, nhưng sửa chữa đơn giản nhất cho một vấn đề tôi đã gặp với một \ u0000 trong đầu ra gỡ lỗi json của tôi (một ngoại lệ được chuyển đổi thành mảng, các phím mảng chứa 0 ký tự.) :) –

+0

trim giải quyết vấn đề cho tôi sau giờ thử các giải pháp khác. cảm ơn! – Rodniko

0

Trong khi nó có thể không phải là mục tiêu chính của câu hỏi của bạn, xin vui lòng có một cái nhìn tại các chức năng lọc của PHP: http://www.php.net/manual/en/intro.filter.php

chức năng lọc xác nhận và khử trùng các giá trị. Hình thành các trang web 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";  
} 

Kết quả:

(a) địa chỉ email vệ sinh này được coi là hợp lệ.

(b) địa chỉ email được vệ sinh này được coi là không hợp lệ.

Địa chỉ email vệ sinh (C) này được coi là hợp lệ.

Trước: ([email protected])

Sau: [email protected]

+0

Chuỗi không phải là địa chỉ email ??? – Jabari

Các vấn đề liên quan