私はかなりの量の検索を行ってきましたが、これまでのところ、これが既に回答されていることを見つけることができません (ただし、適切に質問していない可能性があります)。
PHP変数に保存されたページに単純なタイトル文字列があります
$title
それを print_r すると、幸せで正常な文字列が返されます
Art's of Glass: Photos From Crystal Castles' Gra
ここが私が失った場所です。この変数で urlencode を実行すると、戻ってきます
urlencode($title);
Art%26%23039%3Bs+of+Glass%3A+Photos+From+Crystal+Castles%26%23039%3B+Gra
最初の 10 文字を見ると、urlencode は本来の機能を果たしていますが、少し余分な機能も備えています。"'" を html エンコーディング (') に変更し、その結果の文字列に対して urlencode を実行しました。
手動でエンコードされた文字列を印刷するとき
urlencode("Art's");
Art%27s
結果は正しく出ます。
私の人生では、最初の例でその余分なステップが発生している理由を理解できません。私はすべてを試しました。エンコードする前に htmlspecialchar_decode -d $title を実行し、可能な限り印刷しました。誰かが光を当てることができれば、起こりうる問題についての提案さえあれば、それはありがたいです. 後で他の変装に現れる可能性があるため、この特定のインスタンスに合わせてソリューションを「調整」する必要は本当に避けたい.
解決策: Quentin と JMB がこれを解決するのを手伝ってくれました。元の文字列は既に HTML エンコードされており、htmlspecialchars_decode($title, ENT_QUOTES) を使用して通常の文字列に変換する必要がありました。