PHPとXMLを使用する単語辞書を作成しました。ユーザは、Webページフォームの入力ボックスにクエリを入力し、その値をPHPを使用してXMLファイルの単語と比較します。 nodeValue
が検索語句と一致するタグはすべて、HTMLテーブルに戻されます。アポストロフィを含む同一の文字列の比較が失敗する
検索は全体的に問題なく、全体的に問題なく動作します。ユーザーが正確に一致するものを検索するためにチェックできるオプションがあります。このチェックボックスをオンにすると、PHPスクリプトは単純な比較を行いますif ($searchterm == $xmlTagNodeValue)
ハイフンやアンダースコアなどのアルファベット以外の文字を含む文字列を含むすべての文字列に対して正しく戻ります。アポストロフィを含む文字列は例外です。
つまり、入力ボックスに入力されたcan't
は、何とかXMLファイルのcan't
と等しくありません。
私は完全に迷っています。私は絶対に両方の文字列で同じ文字であることを確信しています。私は、同じテキストエディタで両方のファイルを開いて、XMLファイルから値をコピーして貼り付けて、入力ボックスの値をハードコーディングしてみました。しかし、比較は常にfalseを返します。
私が想像できる唯一のことは、何らかのエンコードの問題であり、文字が同じに見えるかもしれないが、異なる値を持つことです。しかし、XMLファイルはUTF-8(関連する場合はBOMなし)として保存され、WebページはUTF-8で表示されているため、他に何ができるのか分かりません。
ある時点でエスケープされているものはありますか? –
16進エディタを使って2つの '' 'が同じコードポイントを持つことを確認しましたか? – alex
うーん...面白いです。私は 'filter_input'と' FILTER_SANITIZE_STRING'を使って入力を取得していました。私がそれを止めて '$ _REQUEST'を使用したとき、文字列はアポストロフィの前にバックスラッシュを付けて' can \ 't'と表示します。今、私はそれを止める方法を理解する方法が必要です.... –