Php не видит русские буквы

Русские символы из массива PHP «криво» отображаются на странице

Есть сайт, с выбором языков. Часть текста берется из базы данных (я поставил кодировку на подключение) и русский язык из бд отображается нормально. Но ещё у меня есть файл php , который я подключаю к странице на которой нужно отобразить текст из этого файла. В файле, в массиве содержатся некоторые слова на русском и английском языке и когда нужно отобразить русские слова он на странице они выглядят какими-то символами. Пытался ставить кодировку в этом файле так header(«Content-Type: text/html; charset=utf-8»); но в таком случае слова из файла отображаются нормально, а все остальные(из бд) знаками вопроса и прочим. Кодировка на соединении с бд: $connection=mysqli_connect(server, name, pass, db_name); $connection->set_charset(«utf-8»); . Опишу структуру: есть файл lang.php в котором содержится текст в таком виде:

$blog_single_arr = [ "no_art" => [ "no_art_title" => [ "en" => "No Articles.", "ru" => "Нет статей." ], "no_art_text" => [ "en" => "Sorry, but there are no articles on this category.", "ru" => "Извините, но статьи по этой категории отсутствуют" ] ]; 

Потом, я подключаю этот файл к файлу самой страницы и там, в зависимости от выбранного пользователем языка я вывожу текст таким образом:( $current_lang это либо ‘en’ либо ‘ru’) То есть сам файл служит только ресурсом, с которого, при потребности я беру текст. Подскажите, как можно сделать так что бы русские слова из файла отображались нормально? Отображение текста из бд с заголовками Отображение текста из файла без заголовков

Читайте также:  Css class example div

посмотрите кодировку самого файла (notepad++ умеет и показывать и конвертировать). Там вполне может быть 1251 кодировка.

Попробуйте поставить следующие заголовки header(‘Content-Type: text/html; charset=utf-8’); mb_internal_encoding(‘UTF-8’); mb_http_output(‘UTF-8’); mb_http_input(‘UTF-8’); mb_regex_encoding(‘UTF-8’); и покажите какие у вас символы? Мне обычно этих заголовков за глаза хватает

@Walfter после вставки заголовков все так как я и писал, все что из бд выглядит как на первом скрине, а текст из файла отображается нормально. Второй скрин отображение текста из файла без заголовков(с бд без них все нормально отображает)

Источник

Что изменить, чтобы кириллица выводилась правильно из программы, запускаемой из PHP?

Меня не слушаются настройки кодировки cайта (Apache+PHP7.2 на Ubuntu).
Есть две утилиты конвертации документов doc в txt.
В консоли (Linux) обе отображают кириллицу корректно! А на сайте одна выводит латиницей, другая вопросиками.

В самом начале страницы index.php я указываю, как положено

И сharset влияет на отображение русского текста в операторе echo. Если я выбираю utf-8, то echo выводит текст русскими буквами:
echo «Русский»;

Но вывод двух утилит не изменяется ни при каких кодировках!
catdoc

$text = shell_exec('/usr/bin/catdoc /test.doc'); echo $text; // выводит русский текст латиницей
$text = shell_exec( '/usr/bin/soffice --headless --convert-to txt --cat /test.doc'); echo $text; //выводит вопросики $text = shell_exec(/usr/bin/soffice --headless --convert-to "txt:Text (encoded):UTF-8" --cat /test.doc); echo $text; // выводит вопросики

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

В РНР.ini и в .htaccess и в headere я устанавливал utf-8, windows-1251, ASCII, ANSI, KOI8-R и перегружал Апачи. Ничего не меняется.

shell_exec это плохой вариант по части безопасноти. Попробуйте PHPOffice использовать. Пример смог найти только в коде теста, но думаю что при желании можно будет разобраться: https://github.com/PHPOffice/PHPWord/blob/develop/.

Я изменил вопрос, так как не там устанавливал кодировку. Нужно было в самом начале кода рнр ставить оператор header, а я менял в рнр.ini и в заголовке HTML. Теперь я убрал вообще HTML и вывод echo СТАЛ ЗАВИСЕТЬ от кодировки в headere. То есть русские буквы в echo «Русский текст»; стали видны только при установке utf-8 в headere.

Да я попробовал по Вашему совету mb_internal_encoding.
Ну она устанавливает какую-то переменную для библиотеки mb и сама же ее считывает и зачем мне она? Пример на phpword мне тоже cейчас не нужен, так как у меня файлы doc, а не docx.

У меня проблема в том, что не меняется вывод утилит на экран (через echo), независимо от того, что я изменяю header. Что мне нужно изменить, чтобы они выводили по русски?

Проблемы безопасности меня тоже сейчас не интересуют — мне нужно всего лишь определить кодировку или гарантированно сконвертировать вывод утилит в UTF-8 для передачи в другой модуль программы.

В общем проблема оказалась вот в чем:
Оказалось, что для правильного отображения кириллицы на сайте нужно обязательно указать в параметрах catdoc одну из русских кодировок utf-8, koi8-r, cp866, cp1251 (не windows-1251). Без этого ключа вывод на сайте идет латиницей, несмотря на header.

Если я ставлю одну из этих кодировок, то вывод на экране зависит от установки в headere!

Вопрос закрыт! С soffice видимо та же проблема, разберусь. Точнее проблема с shell_exec. Как будто выходная кодировка по умолчанию не проходит через shell_exec. Какая она я так и не понял. В доке на сатdoc написано, что внутренняя кодировка unicode. В консоли (Ubuntu) сatdoc работает нормально без ключа -d.

webru

Укажите принудительно локаль перед shell_exec

$locale='ru_RU.UTF-8'; setlocale(LC_ALL, $locale); putenv('LC_ALL='.$locale); $text = shell_exec('/usr/bin/catdoc /test.doc');

Источник

Не видит русские буквы

В общем задание такое: Дано слово. При загрузке страницы вместо случайно выбранного символа ставится «*». Нужно правильно ввести недостающий символ, при этом не обращать внимания на регистр..

И с английскими символами все работает, а вот с русскими нет, на заглавную букву пишет «верно», а вот уже строчную пишет «неверно».

Кодировка наверно виновата? Стоит ANSI и на форме выводит все правильно, но когда перевожу в utf-8, то перед * ставит непонятный знак вопроса..

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
 $slovo = "МАНЧЕСТЕР"; $ran=rand(0,strlen($slovo)-1); $wrt1=$slovo[$ran]; $slovo[$ran] = '*'; echo "
"; echo "$wrt1>"; echo "";echo"";echo"";echo"
$slovo testing1" size=7 required>
"
; echo ""; echo ""
; if ($_GET['ad']) { if(strnatcasecmp($_GET["wrt1"],$_GET["testing1"])==0) echo "ВЕРНО!"; else echo "НЕВЕРНО!"; } ?>

Источник

Выводятся . вместо русcких букв в PHP

введите сюда описание изображения

Имеем базу данных MySQL с кодировкой utf8_general_ci Так же, имеем PHP файл который берёт данные из базы (кодировка UTF-8)

  1 . . . 123   2 34234-1 234234-2   3 12332 32133   

Подскажите пожалуйста, как мне поставить правильную кодировку, что бы вместо знаков вопроса (. . . ) отображались русские буквы (Курс Классический массаж). Копаюсь уже сутки — понять не могу. И ещё, создал файл .htaccess с содержимым

Данные в базу кто-то записал. Он сделал это в какой-то кодировке. Эта кодировка могла быть не utf-8. Попробуй добавить запись сам и прочитать её же.

mysql_connect уже устарел, а в новых версиях php его совсем убрали по умолчанию. Я бы посоветовал попробовать сразу писать с mysqli или pdo — смысл в этом есть, и может даже проблема сама отпадет. Также стоит проверить, какая кодировка файла скрипта и других файлов, которые в нем используются через include / require — она должна быть utf-8 без BOM (обычный utf-8 имеет вначале файла служебные байты, из-за которых могут возникнуть проблемы).

2 ответа 2

В самом редакторе поставьте utf-8 или ide не знаю что у вас, потом чистом виде библиотека mysql не поддерживается. Потом в кодировке дефис не прописывается + text/html лучше У вас как вариант можно использовать mysqli или pdo . Я использую pdo библиотеку сделайте такой код всё заработает DB

 public function __clone() <> public static function instance() < if (self::$instance === null) < $opt = array( PDO::ATTR_ERRMODE =>PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => TRUE, ); $dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHAR; self::$instance = new PDO($dsn, DB_USER, DB_PASS, $opt); > return self::$instance; > public static function __callStatic($method, $args) < return call_user_func_array(array(self::instance(), $method), $args); >public static function run($sql, $args = []) < $stmt = self::instance()->prepare($sql); $stmt->execute($args); return $stmt; > > ?> 
$result = DB::run("SELECT * FROM shell"); foreach ($result as $row) < echo"  ".$row['id']." ".$row['description']."> ".$row['date'].">   "; > 

если будут ошибки пишите я проверил в версии 7.0

Источник

Русские буквы и символы в PHP скриптах и базе данных MySQL

Проблемы с кодировкой в PHP

Follow us on Twitter Follow us on rss

При использовании локального сервера на компьютере под управлением Windows, будь то Denwer или лбой другой набор, возникает проблема с отображением русских символов и букв при выводе страницы в браузер. Причины этой проблемы могут быть разными, в данной статье я расскажу о некоторых из них и постараюсь помочь с их решением.

Обычный вывод в PHP

Если не отображаются русские символы при обычном выводе через echo, появляются знаки вопроса (?) вместо букв, то проблемой может быть неверно указанная кодировка файла. Стандартная программа блокнот Windows по умолчанию сохраняет файл в кодировке ANSI, в результате чего появляется такая проблема как на картинке.

Знаки вопроса вместо букв

Знаки вопроса вместо букв

Решить проблему можно сохранив файл в формате UTF-8, для этого в блокноте достаточно нажать Файл->Сохранить как… и в появившемся окне выбрать тип файла «Все файлы» и выбрать кодировку UTF-8. После чего нажать кнопку сохранить и подтвердить замену файла.

Сохранение файла в кодировке UTF-8

Сохранение файла в кодировке UTF-8

Открываем вновь в браузере и видим, что проблема решена.

Нормальное отображение символов в PHP

Нормальное отображение символов в PHP

Этот способ показан для программы Блокнот Windows, т.к. чаще всего проблема возникает именно с ней у начинающих программистов PHP. Для программирования лучше использовать специальный текстовый редактор (Sublme Text, Notepad++ и др.) или IDE PhpStorm, они по умолчанию работают UTF-8.

Ошибки с русским текстом в базе данных MySQL

Проблема проявляет себя во время сохранения данных в базе данных MySQL. Обычно это происходит из-за того, что пользователь, при создании новой базы данных и таблицы, не выбирает сравнение(кодировку) и она устанавливается по умолчанию как latin1_swedish_ci.

СУБД возвращает ошибку при попытке добавить русский текст в поле записи.

#1366 — Incorrect string value

Ошибка при добавлении русского текста в запись таблицы СУБД MySQL

Ошибка при добавлении русского текста в запись таблицы СУБД MySQL

Чтобы не сталкиваться с такой проблемой необходимо всегда выбирать сравнение utf8_general_ci при создании базы данных, таблиц и столбцов.

Знаки вопроса при выводе данных из базы данных MySQL

Иногда возникает проблема с отображением данных, полученных из базы данных MySQL. Обычно вместо русских символов выводятся знаки вопроса.

Проблема решается путем установления кодировки подключения к базе данных.

Если вы пользуетесь старыми функциями для работы с БД MySQL, то сразу после функций подключения к базе данных необходимо добавить:

и при этом советую вам почитать про PDO, так как библиотека для работы с БД MySQL, включающая функции mysql_connect(), mysql_select_db() и прочие уже устарела, а в версии PHP 7 вообще убрана.

Если вы работаете с PDO, то в DSN(способ соединения с БД у PDO) необходимо в параметре charset устанавливать кодировку utf8. Пример соединения с кодировкой:

$ms_host = "localhost"; // Хост $ms_db = ""; // Имя БД $charset = "utf8"; // Кодировка соединения $dsn = "mysql:host=$ms_host;dbname=$ms_db;charset=$charset";

Если ничего не помогает

Попробуйте после подключения к БД добавить mysql_query(«SET NAMES utf8»);

Попробуйте в начале PHP скрипта добавить header(‘Content-Type: text/html; charset=utf8’);

А так же не забывайте о meta-теге между и

Буду рад, если кому-нибудь помогли данные советы. Вы можете задать вопрос со своей проблемой в комментарии и мы попробуем вместе разобраться. Удачи в устранении ошибок и багов!

Для вас это может быть интересно:

Русские буквы и символы в PHP скриптах и базе данных MySQL : 2 комментария

  1. Скейли 19.10.2016 Нормально отображаться русский текст начал только после указания кодировки UTF-8(без BOM) в notepad++, хотя meta charset использовал. Почему разрабы не могут проблемы кодировкой раз и навсегда решить, указывать приходится во всех местах. 🙁
  1. KoT 08.01.2021 А я использовал кодировку UTF-8 с BOM и так же нажимал преобразовать в UTF-8 с BOM и русский текст отобразился

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

  • Qt (4)
  • SEO (5)
  • Администрирование (4)
  • Алгоритмы (6)
  • Заработок (1)
  • Операционные системы (4)
  • Ответы (2)
  • Программирование (23)
  • Сайтостроительство (11)
  • Чынгыз к записи Как найти сумму и произведение элементов массива на C++
  • Чынгыз к записи Как найти сумму и произведение элементов массива на C++
  • Di к записи Создание Excel документа на PHP (генерация .xls файлов)
  • Илья к записи Русские символы(буквы) при вводе/выводе в консоль на C++
  • LedsHack к записи Найти максимальный и минимальный элемент массива на C++

Источник

Оцените статью