2016-10-17 23 views
4

すでにそこにあるエンティティコードを使用してデータを返すように見えるサードパーティAPIを使用しています。例えば、The Lion’s PridePHPエンティティでまだエスケープされていない場合は、文字列をエスケープします。

APIから文字列をそのまま印刷すると、ブラウザでうまく表示されます(上の例ではアポストロフィで表示されます)。しかし、私はAPIが将来、常にエンティティを使用するとは信じられないので、印刷する前にhtmlentitieshtmlspecialcharsのようなものを使いたいと思っています。この問題は、エンティティコード内のアンパサンドを再度エンコードし、最終結果がユーザーフレンドリーなものを表示しないHTMLソースのThe Lion’s Prideになります。

htmlentitiesまたはhtmlspecialcharsは、文字列でまだ使用されていない場合のみ使用できますか?エンティティがすでに文字列に存在するかどうかを検出する組み込みの方法はありますか?

答えて

3

html_entity_decode()を使用して)誰もあなたの実際の質問に回答しているように見えるので、私は

どのように私はそれがまだされていない場合にのみにhtmlentitiesかはhtmlspecialcharsを使用することができます文字列に使用されますか?エンティティがすでに文字列に存在するかどうかを検出する組み込みの方法はありますか?

これは不可能です。私は、HTMLのエンティティに関する教育ポストを作ってるんだと私は実際に画面上でこれを印刷したい場合はどう:

The Lion’s Pride 

...それは...としてエンコードする必要があろう

The Lion’s Pride 

しかし、それが文字列に印刷したい実際の文字列だったらどうでしょうか? ... 等々。まだちょうどこの問題を回避している - 他の回答からのアドバイスの出番である -


ボトムラインは、あなたがそこから与えられた仕事してきた何を知っに持っている、です。

二重エンコードされた文字列を入力するとどうなりますか? HTMLでエンコードされた文字列をXMLでラップし始めるとどうなりますか? JSONでそれをラップしますか? ...そしてJSONはバイナリ文字列に変換されますか?可能性は無限大。

あなたが依存しているAPIが突然出力タイプを切り替えることは不可能ではありませんが、それはまた、ユーザーとの元々の契約にかなり大きな違反です。ある程度までは、それが何をするつもりかを行うには、APIに信頼を置かなければなりません。単位/統合テストは残りの信頼を構成します。

そして、あなたはのために、彼らが作ることができる任意の可能な変化を動作するプログラムを書くことができませんでしたので、それがすべてで任意のの変化を予測しようとする無意味です。

0

私は最高の解決策は、元の文字列からすべてのhtmlエンティティ/特殊文字をデコードしてから、再度htmlエンコードすることです。

このようにして、元の文字列がエンコードされているかどうかに関係なく、正しくエンコードされた文字列になります。

0

文字列をデコードし、エンティティを再エンコードします。

$string = htmlspecialchars(html_entity_decode($string)); 

https://eval.in/662095

-1

また、htmlspecialchars_decode()を使用するオプションもあります。

$string = htmlspecialchars_decode($string); 
-1

それはにhtmlentitiesですでにです:

php > echo htmlentities('Hi&mom', ENT_HTML5, ini_get('default_charset'), false); 
Hi&mom 
php > echo htmlentities('Hi&mom', ENT_HTML5, ini_get('default_charset'), true); 
Hi&mom 

だけではないダブルエンコードするために、[オプション]第四引数を使用します。

0

あなたが求めるものは何もありません。

サービスがどのようなデータを返すのかを知っている必要があります。

それ以外のものはすべて推測されます。


例:

サービスが何を&をバック与えているが、エスケープされていない場合は?

あなたは正しい値が&

ている間、あなたが誤って &として解釈するを脱出IS 推測
関連する問題