Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Веб-программирование > PHP / MySQL

PHP / MySQL Создание динамических Веб-ресурсов

Ответ
 
Опции темы
Старый 18.09.2013, 17:22   #1
Черный крыс
 
Сообщений: n/a
PHP что с кодировкой ?

Сканирую в ПХП директорию, там папки и файлы именованы кирилицей, вывожу дерево в ХТМЛ, но вместо русских букв вопросики... Как это вылечить?
 
Ответить с цитированием
Старый 18.09.2013, 18:10   #2
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (22.09.2013)
Старый 18.09.2013, 18:14   #3
Черный крыс
 
Сообщений: n/a
Ответ: PHP что с кодировкой ?

header('Content-Type: text/html; charset=utf-8');
не помогло...
 
Ответить с цитированием
Старый 18.09.2013, 18:15   #4
Черный крыс
 
Сообщений: n/a
Ответ: 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
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: PHP что с кодировкой ?

<?php
header('Content-Type: text/html; charset=utf-8');
?>


Это до выдачи в самое начало
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 18.09.2013, 18:49   #6
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: 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 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Phantom (19.09.2013)
Старый 18.09.2013, 18:51   #7
Черный крыс
 
Сообщений: n/a
Ответ: PHP что с кодировкой ?

Рандомэ... теперь стало наверно лучше.... вместо вопросиков в ромбике теперь простые вопросики... =)
 
Ответить с цитированием
Старый 18.09.2013, 19:05   #8
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: 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 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.09.2013, 19:11   #9
Черный крыс
 
Сообщений: n/a
Ответ: PHP что с кодировкой ?

Урре! робит через иконв. Спасибо!
 
Ответить с цитированием
Старый 18.09.2013, 19:13   #10
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: PHP что с кодировкой ?

Сообщение от Diablo1909 Посмотреть сообщение
Урре! робит через иконв. Спасибо!
Обращайся
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 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
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 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
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Черный крыс (20.09.2013)
Старый 22.09.2013, 11:06   #13
Черный крыс
 
Сообщений: n/a
Ответ: 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
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: PHP что с кодировкой ?

filetype($d) != "dir" 
лучше заменить на
is_dir($d
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Черный крыс (22.09.2013)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 10:50.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com