• Как переписать PHP движок с Windows-1251 на UTF-8?

    php666
    @php666
    PHP-макака
    Я так понимаю, речь идет об этом списке аналогов: php.net/manual/ru/ref.mbstring.php ?
    Да. Плюс, возможно, придется искать еще и самописные аналоги, которых еще нет в самом php. Я когда свой двиг переписывал, то мне понадобилось лишь 3 функции-аналога найти.

    Насколько я понимаю, по части PHP нужно будет еще как минимум задать нужную кодировку в конфиге.
    У меня в htaccess вот это:
    # Кодировки
    php_value mbstring.language "Russian"
    php_value mbstring.internal_encoding "UTF-8"
    php_value default_charset utf-8
    
    AddDefaultCharset utf-8


    БД - то уже отдельные пляски
    Конвертируем и при подключении к базе задаем mysqli->set_charset('utf8').

    Еще из нюансов - на сайте есть AJAX, с перекодировкой результатов
    да, убрать перекодировку, оставить лишь заголовок 'application/json; charset=utf-8' и сделать просто json_encode.

    Например, есть preg_replace, но нет mb_preg_replace.
    там есть модификатор /u

    Вот статья - https://webonrails.ru/post/143646653415428599/
    Ответ написан
    4 комментария
  • Как сделать mod_rewrite единый редирект по нескольким условиям?

    @dodo512
    1. Редирект на https;
    2. Редирект на без www + без повторяющихся слешей;

    RewriteCond %{THE_REQUEST} //     [OR]
    RewriteCond %{HTTPS}       off    [OR]
    RewriteCond %{HTTP_HOST}   ^www\. [NC]
    RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]

    Или так:
    RewriteCond %{THE_REQUEST} //     [OR]
    RewriteCond %{HTTPS}       off    [OR]
    RewriteCond %{HTTP_HOST}   ^www\. [NC]
    RewriteCond %{HTTP_HOST}   ^(?:www\.|)(.+) [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]


    Или даже без флага [OR]
    RewriteCond %{HTTPS};%{HTTP_HOST};%{THE_REQUEST} !^on;(?!www\.)[^;]+;(?!.*//) [NC]
    RewriteCond %{HTTP_HOST} ^(?:www\.|)(.+) [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]


    Можно и в один RewriteCond всё запихнуть.
    RewriteCond %{HTTP_HOST};%{HTTPS};%{THE_REQUEST} ^(?=(?:www\.|)([^;]+))(?!(?!www\.)[^;]+;on;(?!.*//)) [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
    Ответ написан
    22 комментария
  • Как сделать mod_rewrite единый редирект по нескольким условиям?

    1. очень просто, этого делать не нужно, последовательные коды это нормальное явление, да лучше этого не делать, но по факту от них никуда не деться и яндекс и гугл с легкостью их видят.
    2. сложность такого редиректа вырастет и притом в стппени количества свобод ( мат часть)
    то есть если я вам его напишу вы все-равно не сможиите с ним уже потом что-то сделать.
    3. # в нижнем регистре - дайте в рожу тому кто предложыл сделать этот идиотский редирект, линукс регистрозависимая система, в отличие от виндовс, и такие идиотские редиректы в нем делать: А нет смысла, Б нельзя.
    (тут поясню)
    Вам нужно будет делать условия что это не файл не ссылка не директория, и только при таком условие менять регистр, в противном случае вы рискуете у Image.jgp получить 404
    НО по сути у вас останутя только те урлы которые делает ЧПУ сайта, а это уж простите нужно настроить адекватно ЧПУ на сайте вот и все, не нужно страдать ..йней.
    Если же вы боитесь сделать неправильный редирект то установите флаг [NC]
    Формирование же ЧПУ на совести движка, лезть в него идиотскими редиректами это верх криворукости.
    4. .htaccess читается сверху вниз и если вы хотите сделать редирект на ввв и он сразу https то поставьте его выше частного случая редиректа на htttps в таком случае вы получите редирект и ввв и https сразу ;), переместив его ниже у вас действительно будет два редиректа.
    два слеша норм НО опять же конструкция разрастется в количество раз степени свободы, а следоватлеьно это уже минимум строк 20
    Ответ написан
    Комментировать