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

가 적어도 한 번 나는 모든 사람들이 하나 :)의 속임수됩니다 추측 - 하나 (파이어 폭스에서 U 예를 들어, Ctrl 키) 페이지의 소스를 일반 텍스트 모드 (header('Content-type: text/plain');)에 브라우저를 강제하거나 볼 수 있습니다. – kapa

+0

그의 대답은 좋다. 유일한 차이점은 마지막 'echo'를 사용하면'htmlspecialchars()'를 사용하지 않는다는 것입니다. 출력되는 것은','이지만, HTML이기 때문에 쉼표로 표시됩니다. 브라우저에서 HTML 소스를 확인하십시오. [또는 코드의 데모를 확인하십시오.] (http://codepad.viper-7.com/gY45Dr) – kapa

+0

12MB 페이지에서 작동하지 않습니다 (Firefox 또는 apache/php가 좋지 않음). 대용량 페이지를 처리하고 응답을 일시 중단하고이 페이지를로드하는 데 최대 2GB의 RAM을 사용했습니다. 나는 소스 ,을 보지 못했습니다. 그런 다음 12kb 페이지로 시도했습니다. 결국 소스에 ,이 표시되었습니다. 그것은 내가 전에 컴퓨터에서 본 이상한 행동이었다. 그리고 이것이 응답 한 ppl (항상 한 줄 입력 = <1kb 사용)에서 항상 작동하는 이유입니다. – YoYoMa

답변

5

브라우저에서 이것을 보는 경우 브라우저 WILL은 문자 엔티티를 실제 문자가 아닌 실제 텍스트로 렌더링합니다.

+1

명령 줄에서 시도했는데 문제가 없습니다. 그래서 나는 Marc과 마찬가지로 브라우저가 렌더링한다는 것을 확신합니다! – helle

+0

@yoyoma : 이름이 매우 유사한 3 개의 변수가 있다고 가정하면 올바른 변수를 출력하고 있습니까? 위의 코드는 스크립트의 직접 잘라내 기와 붙여 넣기입니까, 아니면 다시 입력합니까? –

관련 문제