2011-08-02 9 views
1

前のtopicによると、PHPの文字列の空白/タブを整えるつもりです。文を書く方法PHPを使用して文字列の空白/タブを整える

$html = '<tr><td>A  </td><td>B </td><td>C </td></tr>' 

に変換

$html = '<tr>  <td>A  </td>    <td>B </td>  <td>C </td>  </tr>' 

str.replace(/>\s+</g,'><');が好き?

+0

['preg_replace()'](http://php.net/manual/en/function.preg-replace.php) – Phil

+1

@Phil:いいえHTML解析にregexを使用しないでください。 –

+0

@Tomolakこの場合、私はそれが有効だと言っています。 HTMLはとにかく解析されていません。それは簡単な文字列操作です。また、それは質問 – Phil

答えて

4
$str = preg_replace('/(?<=>)\s+(?=<)/', '', $str); 

破損しにくいが、いくつかのより多くのリソースを使用しています。

<?php 
$html = '<tr>  <td>A  </td>    <td>B </td>  <td>C </td>  </tr>'; 
$d = new DOMDocument(); 
$d->loadHTML($html); 
$x = new DOMXPath($d); 
foreach($x->query('//text()[normalize-space()=""]') as $textnode){ 
    $textnode->deleteData(0,strlen($textnode->wholeText)); 
} 
echo $d->saveXML($d->documentElement->firstChild->firstChild); 
+1

+1周りを見てください – Phil

+0

完全に堅牢な解決策ではありませんが、入力に依存しては実際には十分です。 –

+0

@Tomalak:確かに、sgml/html/xmlを話しているときは、多分iffy、破損の可能性は十分です。私は代わりを提供するでしょう。 – Wrikken

0

http://sandbox.phpcode.eu/g/54ba6.php

結果

<tr><td>A  </td><td>B </td><td>C </td></tr> 

コード

<?php 
$html = '<tr>  <td>A  </td>    <td>B </td>  <td>C </td>  </tr>'; 
$html = preg_replace('~(</td>)([\s]+)(<td>)~', '$1$3', $html); 
$html = preg_replace('~(<tr>)([\s]+)(<td>)~', '$1$3', $html); 
echo preg_replace('~(</td>)([\s]+)(</tr>)~', '$1$3', $html); 
+0

ソリューションのおかげで、あなたは "〜" '〜()([\ s] +)(​​)〜'と "$ 1 $ 3"?感謝 –

+0

@Charles:デリミタ。 –

+0

@Tomalak Geret'kal:ありがとう、でも$ 1 $ 3? –

関連する問題