PHP: htmlspecialchars() и неанглийские языки

Я новичок в PHP. Когда я пытаюсь использовать htmlspecialchars() с флагом ENT_HTML5, он работает, но все неанглийские слова удаляются. Я старался:

<?php

$sometext = $_GET['query'];
$sometext = htmlspecialchars($sometext, ENT_HTML5, 'UTF-8');
echo $sometext;

?>

Например, я пробовал с запросом "Hello world, Привет мир!" (английский, русский). Но он вернул мне «Привет, мир!». У меня нет доступа к php.ini. Может есть проблема? Как я могу решить эту проблему?

Спасибо, @deceze, я нашел решение:

<?php

$sometext = $_GET['query'];
$sometext = htmlspecialchars($sometext, ENT_HTML5, 'Windows-1251');
echo $sometext;

?>

person mirelana    schedule 25.07.2013    source источник
comment
возможный дубликат UTF-8 полностью   -  person deceze♦    schedule 25.07.2013


Ответы (1)


Проблема в том, что вы сообщаете PHP, что ваша строка закодирована в кодировке UTF-8, хотя на самом деле это не так. Таким образом, PHP не может правильно его интерпретировать и отбрасывает все буквы, не закодированные в кодировке UTF-8.

На самом деле сохраните файл исходного кода в UTF-8 и/или измените объявление кодировки, откуда бы ни исходила эта строка, или измените 3-й параметр на кодировку, в которой фактически сохранена строка.

См. Что абсолютно необходимо знать каждому программисту о кодировках и наборах символов для работы с текстом и Обработка Unicode от начала до конца в веб-приложении, если вам нужна дополнительная информация.

person deceze♦    schedule 25.07.2013