web-dev-qa-db-ja.com

nbspをトリミングします。 with PHP

このような文があります。

1       2     3   4

ご覧のとおり、1 2〜3のテキストには余分なスペースがあります。間にスペースが1つだけある出力が必要です。出力は1 2 3 4になります。

トリムを使用する場合、空白のみを削除できますが、  PHPトリム関数を使用してこのような出力を取得するにはどうすればよいですか?

23
spotlightsnap
$str = "1 $nbsp;     2     3   4";
$new_str = str_replace(" ", '', $str);
24
Lotus Notes

Php.netでこれを見つけて、うまくいきます:

$myHTML = " abc"; 
$converted = strtr($myHTML, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES))); 
trim($converted, chr(0xC2).chr(0xA0));

ソース: http://php.net/manual/en/function.trim.php#98812

60
Tobias Fünke

ただトリムをしたい人のためのより包括的な答え:

$str = trim($str, " \t\n\r\0\x0B\xC2\xA0");

同じトリム処理htmlエンティティ:

$str = trim(html_entity_decode($str), " \t\n\r\0\x0B\xC2\xA0");

このhtml_entity_decodeとtrimの相互作用については、PHP docs here: http://php.net/manual/en/function.html-entity-decode.php#refsect1- function.html-entity-decode-notes

19
Chaoix
$str = " abc ";

echo trim($str, "\xC2\xA0"); //abc
10
Kenny

文字列に実際に「」がある場合、

$str="1       2     3   4";
$s = str_replace("  ","",$str);
print $s;
2
ghostdog74
echo str_replace ( " ", "", "1       2     3   4" );

str_replaceの結果をエコーアウトする必要があることを覚えておいてください。ブラウザが空白を1つしか表示しないため、空白について心配する必要はありません。

1
Steve Obbayi

少し遅れて答えましたが、うまくいけば他の人を助けるかもしれません。 HTMLからコンテンツを抽出する際の最も重要なことは、PHPで tf8_decode() を使用することです。その後、他のすべての文字列操作が簡単になります。外国語の文字でさえ、ブラウザからphpコードに貼り付け文字を直接コピーすることで置き換えることができます。次の関数は、_ _をスペースに置き換えます。その後、preg_replace()を使用して、すべての余分な空白が単一の空白に置き換えられます。最後に先頭と末尾の空白が削除されます。

_function clean($str)
{       
    $str = utf8_decode($str);
    $str = str_replace(" ", " ", $str);
    $str = preg_replace('/\s+/', ' ',$str);
    $str = trim($str);
    return $str;
}

$html = "1 $nbsp;     2     3   4";
$output = clean($html);
echo $output;
_

1 2 3 4

1