私は、アポストロフィを URI と交差させる方法を考え出しました。
ユーザーが「写真アルバムを作成」できるサイトを構築しています。クリックすると、特定のアルバムのすべてのコンテンツが読み込まれて表示されるリンクがあります。私は codeigniter を使用しているため、このページは次のように呼び出されます。
http://www.fourthdraft.com/index.php/admin/manageAlbumContents/dan's/91
admin = コントローラ managealbums = 関数 dan's (アルバム名) = 変数
ご存じのとおり、codeigniter では uri にアポストロフィ (') を使用できません。私の問題は次のとおりです。
- アルバム名を htmlspecialchars/htmlentities とすると &#xx; になります。それらの新しい文字も許可されていません
- URLエンコードすると%xxになります。パーセントは許可されていますが、codeigniter url は処理前にそれをデコードするため、アポストロフィに戻ります
- 私は独自の preg_replace ( ' => '~apos~' ) を作成しようとしましたが、非効率的で、実行する行が多すぎて退屈であることがわかりました。これは、80% 完了した Web サイトがあり、置き換える必要のある文字列がいたるところにあるためです。
- base64_encode の使用も検討しました。それはより多くのスペースを必要としますが、それは仕事をします. 繰り返しになりますが、エンコードされたバージョンには「=」が含まれていますが、これも許可されていません
可能な限り、codeigniter の構成ファイルの許可された文字リストにアポストロフィを追加したくありません。私は彼らが理由でそこにそれを持っていないと信じています。同時に、私は選択肢が不足しています。アポストロフィを許可したい理由は、このコンテキストでは必ず使用されるためです。たとえば、誰かがアルバム名として「ダンの誕生日パーティー」を入れることにした場合はどうなるでしょうか? それは必ず起こる。私のユーザーは文句を言うだろうと確信しています。他の方法で説得できたとしても、それを何に置き換えることができますか? dan_s 誕生日パーティー? 間違っているように見えます。また、facebook でできるのであれば、私もすべきです。少なくとも、フェイスブックがそれをやったのなら、それは方法があることを意味します.
何か提案があれば、撃ちまくってください。それ以外の場合は、許可された URI 文字にアポストロフィを許可するだけで問題ない (そして安全である) かどうか疑問に思っています。私がよく使用するmysqlにとって非常に危険であることは知っていますが、codeigniterのクエリバインディング変数が自動的に文字をエスケープすることを思い出しました。それで十分で、私を安全に保つことができるかどうか疑問に思っています。
それ以外の場合は、良いアイデアを教えてください。私は疲れ果てています