2016-08-23 4 views
0

著作権シンボル(c)も含まれているテキスト行を検索する受け入れテストを作成しようとしています。私は使用しようとしました:著作権シンボルを見るためにどのようにコード化アサーションを作成しますか?

$I->see('© 2016 MyCompany, LLC'); 

アサーションでhtmlエスケープ文字を使用すると失敗します。覚え書きを作成する方法に関するヒントは、著作権シンボルを参照してください?

+0

$ I->( '© 2016 ********** Company、LLC'); – KevinE

答えて

0

seeメソッドは、デコードされたhtmlエンティティにマッチします。したがって、Sammitchのアドバイスで実際の文字を使用する必要があります。

別の方法はseeInSourceメソッドを使用して、それがHTMLであるとして実体を一致させることです。

$I->seeInSource('© 2016 MyCompany, LLC');

アップデート:私は編集履歴をチェックし、あなたが実際の©の文字を使用したことを表示されます元の質問。

私は簡単なテストを行いました。$I->see('© 2016 MyCompany, LLC')は©と©の両方と一致しているので、うまくいくはずです。テストファイルがUTF-8として保存され、WebサイトがUTF-8を使用していることを確認してください。 異なる文字セットを使用する場合は、アサーションで文字コードを使用してください。

+0

ありがとうございます。これは大変助けになりました。 – KevinE

1

著作権シンボルは、ほとんどのマルチバイトエンコーディングで共有されるASCIIの7ビット安全サブセットには存在しないため、使用されるエンコーディングに応じてさまざまなバイトシーケンスで表されます。期待する出力がどのエンコーディングになるかを判断し、一致させるためにアサーション文字列を調整する必要があります。このヘルプのようにリテラルバイトシーケンスを使用しても

$I->see('\xa9 2016 MyCompany, LLC'); 

、あなたがプログラム間のコピー/貼り付けデータの問題を回避する:ISO-8859-1の場合

$I->see('\xc2\xa9 2016 MyCompany, LLC'); // PHP<7 
$I->see('\u{a9} 2016 MyCompany, LLC'); // PHP>=7 

:UTF-8の場合

異なるエンコーディングを使用します。 ISO-8859-1で有効と思われるものは、UTF-8文書にペーストすると完全にボーク処理されますが、その逆もあります。

注:著作権記号は、Extended-ASCII/Windows-1252/ISO-8859-1の1バイト表現が一致するUTF-8シーケンス[U + 80〜U + BF] 2バイトのUTF-8シーケンスの2番目のバイト。これは、UTF-8が常に「後続バイト」の最初の2ビットを予約するため、常に10であるため、最初のニブル10XX、したがって0x80から0xBFが作成されるからです。

私は最近、エンコーディングの不一致を説明しようとすると「ガーベッジバイト」に関する誰かと非常に長い議論をしていたので、これを追加する必要があると感じました。 UTF-8エンコーディングの詳細については、this articleを参照してください。

関連する問題