2012-02-14 65 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