Побитовый результат операции, странное поведение при выводе

Похоже, что мое предыдущее обновление вопроса не было замечено, поэтому новый вопрос.

#dump1 var_dump('two identical strings' | 'two identical strings'); # mind the | // string(21) "two identical strings" #dump2 var_dump('two identical strings' ^ 'two identical strings'); # mind the ^ // string(21) "" 

Почему #dump2 показывает, что длина == 21, но выводит нет / невидимые символы?

Кроме того, при вставке в Notepad ++ в этой строке нет признаков из 21 символа, ну, фактически, даже не одного символа, в отличие от этого вывода из разных операций с неравными строками. введите описание изображения здесь
Те (DC3) , (DC4) и т. Д. Не отображались в браузере, а отображались в Notepad ++.

О, и на самом деле, каковы эти черноватые значения внутри этой строки? Я предполагаю, что это значения уровня бит / ассемблера, но, да, guess !== true .

Заранее спасибо!