2017-08-11 20 views
0

我需要你的幫助。我有很多類型的字符串輸入可以在另一種形式上進行操作。當然,它會有很多字符串輸入風格(雜亂),甚至是從第三方軟件複製粘貼到我的CKeditor編輯器中。操縱凌亂的輸入字符串並將其轉換爲使用PHP的自定義輸出

這裏是我的代碼來操縱輸入字符串更改爲另一種形式。在我的情況下,每個單詞的輸出將在<span>標記中。

function generate_answer_span($str="") 
{ 
    $arr_words = preg_split('/ +/', $str); 
    $arr_str = []; 
    echo '<pre>'; 
    print_r($arr_words); 
    echo '</pre>'; 
    foreach($arr_words as $word) 
    { 
     $word = strip_tags($word); 
     $arr_str[] = "<span style=' background: #ffffbf; 
    border: 1px solid #cecece;'>".$word."</span>"; 
    } 

    return implode(" ",$arr_str); 
} 

$input_string = "<p>Berdasarkan gambarajah di bawah,nyatakan pecahan tersebut.<br />2/5</p><p> </p>"; 
echo generate_answer_span($input_string); 

現在,你可以在紅色圓圈看到是奇怪的事情已經出來了。 「非常糟糕...」。

如何過濾所有的輸入字符串?我期望的結果,我想重置字符串像字符串輸出來自paste to notepad那麼它會沒事的。

任何人都可以幫到我嗎?

謝謝! enter image description here

+1

使用'preg_split('/ <[^>] +>(* SKIP)(* F)| \ s + /',$ str)' –

+0

「tersebut.2/5」結合在一起。我希望它是分開的。謝謝;) – Nere

+1

試試['preg_split('/ <[^>] +>(?:\ s + <[^>] +>)* | \ s +/u',$ str)'](https://ideone.com/UAYrp3 )(它也分裂(連續)標籤)。不需要使用'$ word = strip_tags($ word);'然後。 –

回答

1

試試這個功能:

function generate_answer_span($str="") 
{ 
    $words = preg_replace('#<[^>]+>#', ' ', $str); 
    //$arr_words = preg_split('/ +/', trim($words)); 
    $arr_words = preg_split('/\s+/', trim($words)); 

    foreach($arr_words as $word) 
    { 
     $word = strip_tags($word); 
     $arr_str[] = "<span style='background: #ffffbf; border: 1px solid #cecece;'>".$word."</span>"; 
    } 

    return implode(" ",$arr_str); 
} 

首先你替換空格標籤,然後在空間分割的話。

+0

哇,輸出非常好...你能解釋你做了什麼嗎? – Nere

+1

好吧,就像我說過的,首先我用空格替換標籤,然後用空格分開單詞。我剛剛編輯答案以允許輸入字符串之間的新行。附:你能接受答案,如果它適合你嗎? –

+0

好想法!我需要首先執行我的代碼。以後我會給出反饋,因爲有很多輸入類型會出現。 ;)乾杯...... – Nere

相關問題