2009-03-13 50 views
16

XML構造を表す文字列を含むPHP変数があります。この文字列には、文字列から新しいSimpleXMLElementオブジェクトを作成できないようなillegal文字が含まれています。コンテンツのソースにレスポンスを変更するよう依頼する方法はありません。そのため、SimpleXMLElementオブジェクトを作成する前に、この文字列のクリーニングを実行する必要があります。文字列からNULL文字を削除する方法

この問題の原因となる文字は、(0x00(00)HEX)文字で、この文字列XMLのテキストノードの1つに含まれていると考えられます。

この文字またはSimpleXMLElementオブジェクトを破壊する可能性のある他の文字を削除する最適な方法は何ですか?

答えて

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

は、$text文字列のすべてのヌル文字を置き換えます。複数の置換を行う場合は、最初の2つの引数の配列を指定することもできます。

+0

を[email protected]、これは有効な文字に –

+0

@Johannesロッセルを削除することができます:Iコードとテキストが一致するように$ text =を追加しました。 str_replaceは3番目の引数を変更しません – phihag

+2

コードは私がこれを行うときに動作するようです:$ text = str_replace( "�"、 ""、$ text); –

9

trim()は、ソース文字列の両端(ただし、内部ではない)からヌル文字も削除します。

$text = trim($text); 

ヌル文字がjson_decode()がnullを返すようになり、私は、周りにJSONを渡す場合は特に、ソケット・サーバーの通信のために、これは有用であることが分かってきました。 http://www.php.net/manual/en/intro.filter.php

フィルター機能を検証し、値をサニタイズ:それはおそらく、あなたの質問の主な目標ではないですが

+1

は古い答えかもしれませんが、私は私のJSONのデバッグ出力での\ U0000を持っていた問題のための最も簡単な修正(配列に変換例外は、配列のキーは0文字が含まれていました。):) –

+0

トリム後に私のために問題を解決しました他の解決策を試す時間。ありがとう! – Rodniko

0

は、PHPのフィルタ機能を見てください。 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";  
} 

結果:

この(a)のサニタイズメールアドレスが有効であるとみなされます。

この(b)墨塗りされた電子メールアドレスは、が無効であるとみなされます。

この(C)墨塗りメールアドレスは有効とみなされます。

前:後([email protected]

:エンコーディング(UTF-8)に応じて、

+0

文字列は電子メールアドレスではありませんか? – Jabari

関連する問題