|
PHP / MySQL Создание динамических Веб-ресурсов |
18.09.2013, 17:22
|
#1
|
|
PHP что с кодировкой ?
Сканирую в ПХП директорию, там папки и файлы именованы кирилицей, вывожу дерево в ХТМЛ, но вместо русских букв вопросики... Как это вылечить?
|
|
|
18.09.2013, 18:10
|
#2
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: PHP что с кодировкой ?
В пыху хидер:
header('Content-Type: text/html; charset=utf-8');
В выдачу мету:
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.09.2013, 18:14
|
#3
|
|
Ответ: PHP что с кодировкой ?
header('Content-Type: text/html; charset=utf-8');
не помогло...
|
|
|
18.09.2013, 18:15
|
#4
|
|
Ответ: PHP что с кодировкой ?
<!DOCTYPE HTML>
<html> <head> <title>горно-металлургический центр</title> <?php header('Content-Type: text/html; charset=utf-8'); ?> <meta charset="utf-8"/> <link rel="stylesheet" href="include/css/main.css"/> </head> <body> <header> Header </header> <aside> <?php Scan(); ?> </aside> <content> Content </content> <!-- <footer> Footer </footer> --> </body>
</html>
<?php
function Scan($d="materials") { $dirs = scandir($d); echo("Выберите курс : <select>"); foreach ($dirs as $k=>$v) { if (($v == ".") or ($v == "..")) { continue; } if (filetype("$d/$v") == "file") { continue; } echo("<option>$v</option>"); } echo("</select>"); foreach ($dirs as $k=>$v) { if (($v == ".") or ($v == "..")) { continue; } if (filetype("$d/$v") == "file") { continue; } BuildTree("$d/$v"); } }
function BuildTree($d) { $files = scandir($d); echo("<ul>"); foreach ($files as $k=>$v) { if (($v==".") or ($v=="..")) { continue; } echo("<li>$v</li>"); if (filetype("$d/$v") == "file") { //echo("$d/$v - File<br>"); } elseif (filetype($d."/".$v) == "dir") { //echo("$d/$v - Dir<br>"); BuildTree("$d/$v"); } } echo("</ul>"); }
?>
|
|
|
18.09.2013, 18:38
|
#5
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: PHP что с кодировкой ?
<?php
header('Content-Type: text/html; charset=utf-8');
?>
Это до выдачи в самое начало
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
18.09.2013, 18:49
|
#6
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: PHP что с кодировкой ?
Сообщение от ABTOMAT
<?php
header('Content-Type: text/html; charset=utf-8');
?>
Это до выдачи в самое начало
|
Фигню же советуешь.
Винда же у нас win-1251. Значит и имена файлов в этой же кодировке. Нужно конвертировать перед выдачей например так:
mb_convert_encoding($file, "Windows-1251", "utf-8");
*надеюсь что расширение mb_string сейчас везде есть
Ну или делать всё в Windows-1251, но это плохой вариант. Юникод спасёт мир.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.09.2013, 18:51
|
#7
|
|
Ответ: PHP что с кодировкой ?
Рандомэ... теперь стало наверно лучше.... вместо вопросиков в ромбике теперь простые вопросики... =)
|
|
|
18.09.2013, 19:05
|
#8
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: PHP что с кодировкой ?
Сообщение от Diablo1909
Рандомэ... теперь стало наверно лучше.... вместо вопросиков в ромбике теперь простые вопросики... =)
|
Держи рабочий семпл.
cyrfn.7z
Лень было разбираться с mb_*
Видать он у меня через одно место настроен.
Сделал через iconv.
Это можно убрать
setlocale(LC_ALL, 'ru_RU.UTF-8'); mb_internal_encoding("UTF-8");
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.09.2013, 19:11
|
#9
|
|
Ответ: PHP что с кодировкой ?
Урре! робит через иконв. Спасибо!
|
|
|
18.09.2013, 19:13
|
#10
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: PHP что с кодировкой ?
Сообщение от Diablo1909
Урре! робит через иконв. Спасибо!
|
Обращайся
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
18.09.2013, 20:46
|
#11
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: PHP что с кодировкой ?
Сообщение от Randomize
Фигню же советуешь.
Винда же у нас win-1251. Значит и имена файлов в этой же кодировке. Нужно конвертировать перед выдачей например так:
mb_convert_encoding($file, "Windows-1251", "utf-8");
*надеюсь что расширение mb_string сейчас везде есть
Ну или делать всё в Windows-1251, но это плохой вариант. Юникод спасёт мир.
|
Где он говорил, что у него Винда? Впрочем ты прав. Я что-то не подумал.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
19.09.2013, 14:16
|
#12
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: PHP что с кодировкой ?
Когда пишу под винду какие-то консольные утилиты для себя, то пути тоже всегда через iconv конвертирую. А на линуксах не приходилось юзать русские символы. Ещё для вывода в консоль использую следующий велосипед (не нашёл способа перевести на юникод текущее консольное окно в винде автоматически):
<?php // ********************************************************* class Console{ // ******************************************************* private $charset; // ******************************************************* private function __construct(){ } // ******************************************************* private function __clone(){ } // ******************************************************* public static function getInstance(){ static $instance=null; if($instance==null){ $instance=new self(); $instance->charset(stripos(PHP_OS,'win')===0?'cp866':'utf-8'); } return $instance; } // ******************************************************* public function charset($charset=null){ if($charset==null) return $this->charset; $this->charset=strtolower($charset); } // ******************************************************* public function read(){ return iconv($this->charset,'utf-8//IGNORE',fgets(STDIN)); } // ******************************************************* public function write($string){ fputs(STDOUT,iconv('utf-8',$this->charset.'//IGNORE',$string)); } // ******************************************************* } // ********************************************************* ?>
Пример использования:
<?php
$console=Console::getInstance(); $console->write("Выводим эту строку в консоль\n"); $str=$console->read(); // ждём ввод строки пользователем
?>
Расчёт на то, что сам скрипт после этого пишется полностью в UTF-8. На линуксе не проверял, но один чел сказал, что решение работает.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.09.2013, 11:06
|
#13
|
|
Ответ: PHP что с кодировкой ?
Через AJAX отправляю запрос в ПХП методом GET. Он должен просканировать папку на предмет существования в нем файлов и вернуть результат. отправка :
Scan.php?d=materials/1/1_HTML/1_tabels_HTML
в поле d - хранится путь к папке, которую надо просканировать.
Но ПХП в упор не видит эту папку. Переводил строку пути в формат WINDOWS-1251 - всеравно сканирования не происходит. Все пути заданы верно.
$dd = $_GET['d'];
$d = iconv("UTF-8", "WINDOWS-1251", $dd);
if (filetype($d) != "dir") echo("ERROR ".$d);
$files = scandir($d);
echo($d);
foreach ($files as $k=>$v) { if (($v == ".") or ($v == "..")) continue; echo($v); }
UPD Проблемма решена, выросло из BlitzMAX-привычки =)
Последний раз редактировалось Черный крыс, 22.09.2013 в 19:29.
|
|
|
22.09.2013, 14:01
|
#14
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: PHP что с кодировкой ?
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:12.
|