2012-02-14 64 views
0

我在做簡單的str_replace時遇到了問題。
我想從字符串中刪除所有的逗號,這是可行的。但是當我試圖再次改變字符串時,逗號會以某種方式重新出現。我重構了我的代碼,以確保我沒有造成這種情況。用HTML實體替換的字符重新出現

反正這裏是我的代碼。任何人都可以發現一個錯誤?

$delim=remDelim(fgets($fo)); 
#  echo 'before : '.htmlspecialchars($delim); 
    $delime =str_replace(",",",",$delim); 
    echo 'after : '.htmlspecialchars($delime); 
    $delimed = str_replace("<","",$delime); 
    echo $delimed.'<br />'; 

example output: 
    Jose, jr to Jose&#44; jr to Jose, jr 

它就像我的字符串被以某種方式未被轉換。我會說,這很可能是我混淆了名字,並使用第一個字符串來製作最後一個字符串。但唉,我可以看到情況並非如此。

+1

至少有一次我想每個人都被這個一個:)欺騙。 – kapa 2012-02-14 22:24:24

+0

他的回答很好。唯一的區別是用最後一個'echo'你不使用'htmlspecialchars()'。打印的內容是',',但它是HTML,所以它顯示爲逗號。在瀏覽器中檢查HTML源代碼。 [或者查看你的代碼的演示。](http://codepad.viper-7.com/gY45Dr) – kapa 2012-02-14 22:53:55

+0

它不是在一個12MB頁面上工作(可能是Firefox或者apache/php,因爲它不好用處理大頁面,導致凍結aka無響應,並佔用2GB的ram剛剛加載此頁面)。我查看源,不在那裏。然後我嘗試了一個12 kb的頁面。這最終顯示了,的來源。那是我之前從電腦裏看到的最詭異的行爲。這是有道理的,爲什麼它總是爲答對的ppl工作(使用一行輸入= <1kb)。 – YoYoMa 2012-02-14 23:39:22

回答

5

如果您正在瀏覽器中查看,請注意瀏覽器將字符實體呈現爲實際字符,而不是實體文本。無論是強制瀏覽器進入純文本模式(header('Content-type: text/plain');),或查看頁面的源(例如CTRL - ü在Firefox)

+1

在命令行嘗試了它,並沒有問題。所以我肯定和Marc一樣,瀏覽器呈現它! – helle 2012-02-14 14:32:47

+0

@yoyoma:因爲你有3個變量,名字非常相似,你確定你輸出的是正確的嗎?上面的代碼是直接剪切和粘貼你的腳本,還是重新輸入? – 2012-02-14 14:40:33