Я столкнулся с аналогичной проблемой, описанной здесь (и в других местах) – где, как и при обратном вызове ajax, я получаю xmlhttp.responseText, который выглядит нормально (когда я предупреждаю об этом – он показывает правильный текст), но при использовании 'if' чтобы сравнить его со строкой – он возвращает false.
(Я тоже тот, кто написал код на стороне сервера, возвращающий эту строку) – после большого изучения строки – я обнаружил, что строка имеет «невидимый символ» в качестве ее первого символа. Персонаж, который не был показан. Если я скопировал его в «Блокнот», то удалил первый символ – он не будет удаляться, пока не будет снова нажат «Удалить».
Я сделал charCodeAt (0) для возвращаемой строки в xmlhttp.responseText. И он вернулся 65279 .
Googling показывает, что это какой-то управляющий символ UTF-8, который должен установить кодировку «big-endian» или «small-endian».
Итак, теперь я знаю причину проблемы, но … почему этот символ повторяется? В исходном php я просто использую
echo 'the string'...
и это, по-видимому, каким-то образом выводит [chr (65279)] строку …
Зачем? И как я могу избежать этого?
В заключение и укажите решение:
Блокнот Windows добавляет символ спецификации (3 байта: EF BB BF) к файлам, сохраненным с помощью кодировки utf-8.
PHP, похоже, не беспокоит его – если вы не включите один файл php в другой, тогда все становится беспорядочным, а строки отображаются с символом (65279), добавленным к ним.
Вы можете редактировать файл с помощью другого текстового редактора, такого как Notepad ++, и использовать кодировку
«Кодировать в UTF-8 без спецификации»,
и это, похоже, устраняет проблему.
Кроме того, вы можете сохранить другой файл php с кодировкой ANSI в блокноте – и это также похоже на работу (то есть, если вы действительно не используете какие-либо расширенные символы в файле, я думаю …)
Если вы используете Linux или Mac, вот изящное решение, чтобы избавиться от персонажа на PHP.
Если вы используете WordPress (25% интернет-сайтов работают от WordPress), есть вероятность, что плагин или активная тема вводят характер спецификации из-за файла, содержащего спецификацию (возможно, этот файл был отредактирован в Windows). Если это так, перейдите в папку wp-content / themes / и выполните следующую команду:
grep -rl $'\xEF\xBB\xBF' .
Это будет поиск файлов с спецификацией. Если в списке есть результаты .php, сделайте следующее:
Если вы имеете дело с этим локально, то в конечном итоге вам нужно будет повторно загрузить новые файлы на сервер.
Если у вас нет результатов после запуска команды grep, и вы используете WordPress, то другим местом для проверки файлов BOM является папка / wp-content / plugins. Идите туда и снова запустите команду. Кроме того, вы можете начать деактивацию всех подключаемых модулей, а затем проверить, устранена ли проблема, когда вы снова активируете плагины.
Если вы не используете WordPress, перейдите в корневую папку вашего проекта и запустите команду для поиска файлов с помощью спецификации. Если какой-либо файл найден, выполните четыре процедуры, описанные выше.
Вы также можете удалить символ в javascript с помощью:
myString = myString.replace(String.fromCharCode(65279), "" );
Если вы хотите напечатать строку, содержащую символ ZERO WIDTH NO-BREAK SPACE (например, включив внешний файл без PHP), попробуйте следующий код:
echo preg_replace("/\xEF\xBB\xBF/", "", $string);
В дополнение к вышесказанному, я просто столкнулся с этой проблемой при извлечении некоторых данных из базы данных MySQL (charset установлен в UTF-8) – проблема связана с HTML-тегами, я допустил некоторые базовые, такие как <p> и <a>, когда Я отобразил его на странице, я получил символ & # 65729, просматривающий инструменты Dev в Chrome.
Поэтому я удалил теги из таблицы и удалил проблему & # 65729 (и пустую строку над тем, где должен был отображаться текст).
Я просто хотел добавить к этому, так как мой представитель не достаточно высок, чтобы на самом деле прокомментировать ответ.
EDIT: Используя VIM, я смог удалить спецификацию с помощью :set nobomb
и вы можете подтвердить наличие спецификации :set bomb?
который будет отображать либо bomb
либо nobomb
У меня была эта проблема, и я изменил свою кодировку на utf-8 без bom, Ansi и т. Д. Без везения. Моя проблема была вызвана использованием функции php include в html-корпусе. Перемещение функции include выше моего html (выше! DOCTYPE тега) разрешило проблему.
После того, как я понял, что проблема, которую я тестировал, включает include_once и требует функций. Все попытки включить файл из тела html создали дополнительный разный символ в месте, где начнется PHP-код.
Я также попытался назначить результат включения переменной … т.е. $ result = include ("myfile.txt"); с добавлением того же добавочного символа
Обратите внимание, что перемещение курсора над HTML не приведет к удалению лишнего символа, но он удалит его из моих данных и из области содержимого.
Наверное, что-то на сервере. Если вы знаете, что это там, я бы просто обошел его, пока не решился.
myString = myString.substring(1)
Отбивает первый символ.
Я использую «Dreamweaver CC 2015», по умолчанию он включил эту опцию: «включить подпись спецификации» или что-то в этом роде, когда вы нажимаете «Сохранить как вариант» в меню файла. В появившемся окне вы можете увидеть «Unicode Options …». Вы можете отключить опцию спецификации. И помните, чтобы изменить все ваши файлы. Или вы можете просто перейти к настройкам и отключить опцию BOM и сохранить все свои файлы.
При использовании usign атома это пробел в начале документа до <?php