最初に誤解を解いてみましょう。あなたの例のその文字は「特別な」文字ではありません。Unicode コード ポイント U+2019、「RIGHT SINGLE QUOTATION MARK」です。その HTML エンティティ参照は’
. これは普通の文字です - たまたま ASCII で表現されていない普通の文字です。特定の質問への回答を得る前に、 Joel Spolsky の記事「すべてのソフトウェア開発者が Unicode と文字セットについて絶対的かつ積極的に知っておく必要がある絶対的な最小値 (言い訳はありません!)」を読むようお伝えする必要があります。- それはブリキに書かれていることであり、少なくとも Unicode についてもう少し知識を吸収しない限り、このような問題に遭遇し続けるでしょう. あまり心配しないでください。テキストの扱い方を学ぶまでは、誰もがこのような問題に遭遇します。Unicode は「難しい」というほどではなく、「テキストがどのように機能するかについて無意識のうちに想定していることが露呈しがちです」。†</p>
さて、あなたの質問に。
私があなたを正しく読んでいる場合、あなたに起こっていることは、タイトルに非ASCII文字を含む投稿があり’
、それらを検索しても表示されないget_post_by_title()
ことです(次のようなものを使用しているようですこの質問に対する受け入れられた回答- そうですか?) 解決策には 2 つの方法があります: 検索しやすい形式でタイトルを保存するか、非 ASCII 文字を検索できる検索方法を使用します。
タイトルを別の方法で保存するには、Wordpress DB に保存する前に、PHP の組み込み htmlentities()関数を使用して実行する必要があります'\xNN'
。 DB の照合/文字セットが UTF-8 または別の Unicode 対応エンコーディングに設定されていることを確認してください。これはかなりの労力になります。‡</p>
別の検索方法を使用する場合、DB をいじったり、WordPress の内部を掘り下げたりする必要はありませんが、検索文字列を慎重にいじる必要があります。検索で探している正確な文字を使用するか、'\xNN'
必要に応じて文字参照として表現するか、検索で慎重にワイルドカードを使用する必要があります。
いずれにせよ、頑張ってください。コードがより多く表示される場合は、より具体的なアドバイスを提供できる場合があります。
†: ところで、PHP より優れた言語と MySQL より優れたデータベースを使用すれば、Unicode に関する生活もずっと楽になります。WordPress は、PHP と MySQL と密接に結びついています。PHP と MySQL はどちらも、Unicode の問題を正しく処理するのがひどく、恐ろしく、笑えるほど下手です。そこから PHP と MySQL を根絶やしにすれば、プログラマーとしてのあなたの人生はより良くなるでしょう。
‡: まじめな話、PHP はこれに関してひどく下手で、MySQL は手探りの靴ひもで結ばれた状態にあります。それらを避けてください。