- Русские символы из массива PHP «криво» отображаются на странице
- Что изменить, чтобы кириллица выводилась правильно из программы, запускаемой из PHP?
- Не видит русские буквы
- Выводятся . вместо русcких букв в PHP
- 2 ответа 2
- Русские буквы и символы в PHP скриптах и базе данных MySQL
- Обычный вывод в PHP
- Ошибки с русским текстом в базе данных MySQL
- Знаки вопроса при выводе данных из базы данных MySQL
- Если ничего не помогает
- Для вас это может быть интересно:
- Русские буквы и символы в PHP скриптах и базе данных MySQL : 2 комментария
- Добавить комментарий Отменить ответ
Русские символы из массива 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’) То есть сам файл служит только ресурсом, с которого, при потребности я беру текст. Подскажите, как можно сделать так что бы русские слова из файла отображались нормально?
?php>
посмотрите кодировку самого файла (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.
Укажите принудительно локаль перед 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 ""; if ($_GET['ad']) { if(strnatcasecmp($_GET["wrt1"],$_GET["testing1"])==0) echo "ВЕРНО!"; else echo "НЕВЕРНО!"; } ?>
"; echo " "; echo "$slovo "; echo "testing1" size=7 required>
Выводятся . вместо рус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
При использовании локального сервера на компьютере под управлением Windows, будь то Denwer или лбой другой набор, возникает проблема с отображением русских символов и букв при выводе страницы в браузер. Причины этой проблемы могут быть разными, в данной статье я расскажу о некоторых из них и постараюсь помочь с их решением.
Обычный вывод в PHP
Если не отображаются русские символы при обычном выводе через echo, появляются знаки вопроса (?) вместо букв, то проблемой может быть неверно указанная кодировка файла. Стандартная программа блокнот Windows по умолчанию сохраняет файл в кодировке ANSI, в результате чего появляется такая проблема как на картинке.
Знаки вопроса вместо букв
Решить проблему можно сохранив файл в формате UTF-8, для этого в блокноте достаточно нажать Файл->Сохранить как… и в появившемся окне выбрать тип файла «Все файлы» и выбрать кодировку UTF-8. После чего нажать кнопку сохранить и подтвердить замену файла.
Сохранение файла в кодировке UTF-8
Открываем вновь в браузере и видим, что проблема решена.
Нормальное отображение символов в PHP
Этот способ показан для программы Блокнот Windows, т.к. чаще всего проблема возникает именно с ней у начинающих программистов PHP. Для программирования лучше использовать специальный текстовый редактор (Sublme Text, Notepad++ и др.) или IDE PhpStorm, они по умолчанию работают UTF-8.
Ошибки с русским текстом в базе данных MySQL
Проблема проявляет себя во время сохранения данных в базе данных MySQL. Обычно это происходит из-за того, что пользователь, при создании новой базы данных и таблицы, не выбирает сравнение(кодировку) и она устанавливается по умолчанию как latin1_swedish_ci.
СУБД возвращает ошибку при попытке добавить русский текст в поле записи.
#1366 — Incorrect string value
Ошибка при добавлении русского текста в запись таблицы СУБД 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 комментария
- Скейли 19.10.2016 Нормально отображаться русский текст начал только после указания кодировки UTF-8(без BOM) в notepad++, хотя meta charset использовал. Почему разрабы не могут проблемы кодировкой раз и навсегда решить, указывать приходится во всех местах. 🙁
- 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++