2012-01-24 1 views
1

저는 PHP와 MySQL에서 프로그래밍 한 고객 관리 시스템을 보유하고 있습니다. 회사는이를 사용하여 마케팅 및 주문에 대한 고객 세부 정보를 기록합니다. 내 양식에는 다양한 필드가 있으며, 그 중 하나는 비즈니스 이름입니다.텍스트 필드의 앰퍼샌드가 필드 데이터의 디스플레이와 함께 돌아 다니고 있습니다

필드는 전자 메일러로 가져와 고객 견적 등으로 보내집니다. 필드 내용은 데이터베이스에서 가져 와서 다양한 문자열에 저장됩니다. 상호는 예를 들어 $name에 저장됩니다.

Joe Blogs & Sons과 같은 회사 이름을 입력하면 전자 메일 시스템으로 가져 오는 작업이 Joe Blogs이고 앰퍼샌드를 포함하여 앰퍼샌드가 잘린 후에도 문제가되는 것으로 나타났습니다. 그들이 Joe Blogs and Sons을 사용하면 잘 작동하고 이메일이 꺼지면 Dear, Joe Blogs and Sons이라고 표시되지만 누군가 &을 입력하면 Dear, Joe Blogs으로 끝납니다.

내가 tr_replace 또는 preg_replace과 같은 말을하는 것이 올바른지 또는 &의 탈출 방법이 될까요? .

+0

당신이 확인 했 :

<p><?php echo htmlspecialchars($foo); ?></p> 

나쁜? 만약 그렇다면, 아마 당신은'htmlentities()'함수를 전자 메일에 인쇄/반향하기 전에 변수에 적용해야합니다. – entropid

+0

정보가 너무 적습니다. 도중에 많은 단계가 있습니다. 텍스트가 정확히 어디에 누락됩니까? – deceze

+0

데이터베이스에서 꺼내어 문자열에 추가 한 다음 echo'd에 추가 할 때마다 누락됩니다. 따라서 db에서 선택하고 결과를 문자열에 넣으면 문자열이 사라집니다. 이름은 편집 할 때 필드로 다시 가져 오기 때문에 데이터베이스에 잘 저장됩니다. –

답변

2

HTML 컨텍스트에 삽입 할 특수 HTML 엔터티를 인코딩하려면 htmlentities() 또는 htmlspecialchars()을 사용하십시오. 이 기능들 은 기타 문맥에 대해이 충분하지 않습니다. 예 :

좋은

: 이름이 올바르게 데이터베이스에 저장되어있는 경우

<a href="<?php echo htmlspecialchars($bar); ?>">Click me!</a> 
+0

안녕하세요, html 이메일의 경우 정상적으로 작동하지만 일반 텍스트 이메일의 경우 제대로 작동 할 것입니다. 내 뜻은 친애하는 스미스입니다. & 아들, 또는 보내기 전에 다시 제거해야합니까? –

+0

@IainSimpson : 일반 텍스트는 일반 텍스트입니다.해당 컨텍스트에 대해 인코딩 할 필요는 없습니다. 그냥'echo $ foo;'또는 뭐든간에. – FtDRbwLXw6

+0

'Click me!'좋은! –

0

&을 &amp;으로 변환하십시오. 거기에 맞는 다양한 php 함수가 있습니다. 당신에게 맞는 것을 선택하십시오.

+0

전자 메일을 보낼 때이 데이터를 db로 저장하지 않고 변환하겠습니까? 마치 &를 &으로 바꾼 것처럼 레코드가 편집되면 필드 이름으로 가져올 수 있습니다. & with POST를 str_replace 할 수있었습니다. –

0

"emailer로 가져 왔습니다."무슨 뜻인가에 달려 있습니다.

나는 당신이 단지의 '의 &amp;으로의'상기 &을 변환 할 필요가 상상하는 것 - 아마 가장 당신의 "문자열 청소의 일환으로 (그들은 구문 분석 필요가 HTML을 보유하지 않는 가정) 각 변수 주위에 htmlentities를 사용하는 "과정.

관련 문제