может быть в кодировке UTF-8 . Обычно вы можете безопасно удалить его, если знаете, что кодировкой источника является UTF-8.
Это простая строковая операция:
$withOutUTF8BOM = remove_UTF8BOM($withOrWithOutUTF8BOM);
/**
* Remove UTF8BOM from the beginning of a string (if it exists)
*
* @return string
*/
function remove_UTF8BOM($str)
{
$UTF8BOM = "\xEF\xBB\xBF";
(0 === strpos($str, $UTF8BOM)) && $str = (string) substr($str, 3);
return $str;
}
Однако похоже, что вы должны знать кодировку ввода кода. Данные HTML могут быть в разных кодировках, поэтому, вероятно, стоит заранее нормализовать кодировку HTML (например, преобразовать все кодировки, отличные от UTF-8, в UTF-8), а затем заставить свои собственные функции правильно обрабатывать данные в кодировке UTF-8.
PHP-функция, которую я пишу, извлекает небольшой кусочек HTML-данных с другой веб-страницы, используя file_get_contents()
, затем анализирует фрагмент текста и пытается сохранить его в базе данных. Проблема в том, что полученные данные должны быть закодированы с использованием другой кодировки или чего-то вроде (я не уверен, как это проверить)
Вы можете получить заголовки ответа после получения данных с помощью file_get_contents
. Они хранятся в $http_response_header
. Следующий пример демонстрирует это
(см. HEAD сначала с потоками PHP для функции parse_http_response_header
):
$url = 'http://example.com/';
$body = file_get_contents($url);
$responses = parse_http_response_header($http_response_header);
$contentType = $responses[0]['fields']['CONTENT-TYPE']; // CONTENT-TYPE
echo "Content-Type: $contentType\n"; # Content-Type: text/html; charset=UTF-8
Вам нужно только проверить, существует ли эта строка заголовка и была ли задана кодировка. См. Спецификацию заголовка Content-Type
& RFY 2616 , как это написано:
list($typeAndSubType, $parameter) = explode(';' $contentType, 2) + array(NULL,NULL);
Если не указан тип носителя (тип и подтип) , вы можете (но не должны) пытаться угадать его. Поскольку вы имеете дело с HTML, это обычно text/html
.
Content-Type = "Content-Type" ":" media-type
media-type = type "/" subtype *( ";" parameter )
type = token
subtype = token
Если параметр charset не указан, используйте набор символов по умолчанию для этого типа (text
). В HTTP это ISO‑8859
( ref ).
Чтобы правильно проанализировать параметры, см. Раздел 3.6 :
parameter = attribute "=" value
attribute = token
value = token | quoted-string
Чтобы правильно разобрать строку параметров, я оставляю это упражнение.