2016-11-21 2 views
2

htmlentitiesのスティングがあると仮定すると、
"a s d d"になります。デコードされた破損しないスペース(nbsp)を置き換える方法

エンティティにエンコードすることなく(preg_replaceを使用して)置き換えるにはどうすればいいですか?

preg_replace('/[\xa0]/', '', $string);を試しましたが、動作しません。私はそれらの特殊文字を私の文字列から取り除こうとしているのですが、私はそれらを必要としないので

regexp以外の可能性はありますか?

編集 文字列は、私が解析したい:機能付きhttp://pastebin.com/raw/7eNT9sZr
i「はドン後でimplode("</p><p>", explode("[##]", $text))私はエンティティをエンコードする可能性があるので

私の質問は、まさにこれを行うには、「どのように」(、削除されていないエンティティのpreg_replace('/[\r\n]+/', "[##]", $text)
エンティティを必要とし、デコードする)。しかし、単にstr_replaceまたはpreg_replaceでそれらを削除する方法。

+0

'htmlentities'はxssに対する予防です。ブラウザーでレンダリングしたい場合、&nbspスペースはスペースとしてのみ評価されます。そうでない場合、関数の使用はありません – georoot

+2

スペースまたは '  'を置き換えますか? – Joshua

+0

@georoot htmlentitiesは悪いHTML出力を防ぎます(つまり、データが出されるのを保証します)。XSSは悪意を持って悪質なデータを作成しただけです。 – user2864740

答えて

5

問題は、破損しないUTF-8スペースを間違って指定していることです。適切なコードは0xc2a0です。あなたはそのキャラクターのコードの半分だけを指定しています。

あなたは、単純なstr_replaceを使用したり、正規表現使ってそれを置き換えることができます唯一の引用符で囲まれた文字列が解析されているので、str_replaceの場合には、検索文字列のために引用符を使用する必要があること

// faster solution 
$regular_spaces = str_replace("\xc2\xa0", ' ', $original_string); 

// more flexible solution 
$regular_spaces = preg_replace('/\xc2\xa0/', ' ', $original_string); 

注意をPHPで処理されます(文字コードを実際の文字に変換します)。

UTF-8文字コードが2つの別個の番号として指定されていることに注意してください。

+0

'str_replace()'も同様に動作し、はるかに高速です。 – simon

+0

@imonありがとう、そうです。私の答えに追加されました。 –

+0

私は '\ xc2 \ xa0'と' \ xc2a0'と書かなければならないとは思っていませんでした。ありがとうございました! – Grzegorz

関連する問題