2012-05-14 2 views
6

작은 따옴표 (such as this answer) 만 이스케이프하는 다른 방법이 있다는 것을 알고 있지만 htmlspecialchars()을 사용하는 방법이 있어야합니다.htmlspecialchars()로 단일 인용 부호 만 이스케이프 처리합니다.

매뉴얼에 따르면, 상수의 일부 조합이어야하지만, 설명에 따라 볼 수는 없습니다.

큰 따옴표를 그대로 두면서 작은 따옴표 만 이스케이프 처리 할 수 ​​있습니까? htmlspecialchars()? 따옴표가

+4

왜 필요합니까? 그것은 나에게 문제처럼 보입니다. – Halcyon

+1

작은 따옴표 인 경우 str_replace를 사용하십시오. –

+0

[This] (http://www.php.net/manual/en/function.htmlspecialchars.php#99185)가 도움이 될 수 있습니다. –

답변

9
str_replace("'", "\\'", $string); 

+1

HTML 문서에 삽입하는 것이 목표라면 '\'는 의도 된 대체 문자열입니다. – hvd

+0

그가 작은 따옴표를 벗어나려고한다면, 그것은 의도 한 문자열이 될 것입니다. – Norse

+1

작은 따옴표를 이스케이프하여''-delimited 속성에 넣으면 '''(또는 이와 동등한 항목이있는 경우 이에 상응하는 항목입니다 - 확실하지 않습니다)으로 변경한다는 것을 의미합니다.또 다른 제안 인'ENT_QUOTES'는 큰 따옴표 문자를 변환하여 혼자 남겨달라고 요청합니다. – hvd

1

를 사용하여 반드시 htmlspecialchars (...)

그런 않는 str_replace (...).

또는, ENT_QUOTES

htmlspecialchars($string, ENT_QUOTES); 
9

여기 당신이 찾고있는 상수의 조합이다 사용합니다.

$escaped_string = htmlspecialchars($string, ENT_QUOTES & ~ENT_COMPAT, $encoding); 

& ' < >을 탈출하지만, 혼자 " 잎됩니다. ENT_QUOTES & ~ENT_COMPAT은 " 두 따옴표 - 큰 따옴표 빼기"을 의미하는 비트 조작 언어입니다.

이 상수가 정의 된 방식으로 인해 작동합니다. php-src/ext/standard/html.h

#define ENT_HTML_QUOTE_NONE   0 
#define ENT_HTML_QUOTE_SINGLE  1 
#define ENT_HTML_QUOTE_DOUBLE  2 

#define ENT_COMPAT  ENT_HTML_QUOTE_DOUBLE 
#define ENT_QUOTES  (ENT_HTML_QUOTE_DOUBLE | ENT_HTML_QUOTE_SINGLE) 
#define ENT_NOQUOTES ENT_HTML_QUOTE_NONE 

왜 당신이 이제까지 작은 따옴표를 탈출 할 것이다, 그러나 따옴표? 자, 이중 따옴표를 피할 수있는 이유의 반대입니다. 작은 따옴표는 사용하지 마십시오. " 큰 따옴표와 작은 따옴표가 하나만있는 문자열이 있으므로, 작은 따옴표를 ' 개 붙이면됩니다. ' -delimited string.

예 :

<div data-myobject='<?= htmlspecialchars(json_encode($myobject), ENT_QUOTES & ~ENT_COMPAT, 'UTF-8') ?>' 

json_encode() 따옴표를 많이 만들고, 그래서 작은 따옴표로 구분 된 속성에 결과를 충실하고, 큰 따옴표는 이스케이프 떠나 의미가 있습니다.

+0

이 질문은 오래된 질문이지만 어디에서나 원래 질문에 대한 답을 찾을 수 없어서 게시하기로 결정했습니다. – Grilse

+0

답변입니다. 나는'ENT_HTML5 | ENT_QUOTES & ~ ENT_COMPAT' 본인. – Isius