2012-05-14 5 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

関連する問題