Биты строки PHP [duplicate]

Другой аналогичный подход заключается в использовании htaccess mod_rewrite , чтобы игнорировать часть пути при обслуживании файлов. Ваша никогда не кэшированная индексная страница ссылается на последний путь к файлам.

С точки зрения развития это так же просто, как использование параметров для номера версии, но оно столь же устойчиво, как и имя файла.

Используйте проигнорированную часть пути для номера версии, и сервер просто игнорирует его и обслуживает незашифрованный файл.

1.2.3/css/styles.css служит для того же файла, что и css/styles.css, поскольку первый каталог разделяется и игнорируется файлом htaccess

Включая файлы версий




  
    
    
    
    
    
    
  
  
    
  

Обратите внимание, что этот подход означает, что вам нужно отключить кеширование вашей индексной страницы - Использование & lt; meta & gt; теги, чтобы отключить кеширование во всех браузерах?

.htaccess file

RewriteEngine On

# if you're requesting a file that exists, do nothing
RewriteCond %{REQUEST_FILENAME} !-f 
# likewise if a directory that exists, do nothing
RewriteCond %{REQUEST_FILENAME} !-d 

# otherwise, rewrite foo/bar/baz to bar/baz - ignore the first directory
RewriteRule ^[^/]+/(.+)$ $1 [L] 

Вы можете использовать тот же подход на любой серверной платформе, которая позволяет переписывать URL

(переписать условие, адаптированное из mod_rewrite - переписать каталог в строку запроса, кроме / #! / )

... и если вам нужно кеш-брейдинг для вашей индексной страницы / точки входа в сайт, вы всегда можете использовать gS-версию JavaSript , чтобы обновить ее.

40
задан Mark 26 September 2016 в 14:31
поделиться

5 ответов

Вы должны выяснить, закодирована или закодирована строка в формате нескольких байтов.

В первом случае вы можете просто использовать strlen.

В последнем случае вам нужно найти количество байтов на символ.

документация strlen дает пример того, как это сделать: http://www.php.net/manual/en /function.strlen.php#72274

27
ответ дан Foo Bah 16 August 2018 в 01:25
поделиться
  • 1
    strlen не является функцией mb-safe и фактически возвращает количество байтов, а не символов. Если вам нужно количество символов в многобайтовой кодировке, вы должны использовать mb_strlen. – Maxim Krizhanovsky 27 September 2011 в 13:43
  • 2
    @Darhazer можно перегрузить str*() в mb_str*(), поэтому вызов strlen действительно вызовет mb_strlen. Чтобы узнать, включено ли это, установите флажок mbstring.func_overload в php.ini. Также см. php.net/manual/en/mbstring.overload.php – Carlos Campderrós 27 September 2011 в 14:06
  • 3
    Если вы ищете количество байтов (это то, что вы просили - not количество символов), правильный ответ был отправлен @PhoneixS ниже; как указано @Carlos strlen(), небезопасно, потому что он может быть перегружен на некоторых установках PHP. – mindplay.dk 27 June 2014 в 12:24

В дополнение к ответам PhoneixS, чтобы получить правильную длину строки в байтах. Поскольку mb_strlen() медленнее, чем strlen(), для лучшей производительности можно проверить установку «mbstring.func_overload» ini, чтобы использовать только mb_strlen() когда это действительно необходимо:

$content_length = ini_get('mbstring.func_overload') ? mb_strlen($content , '8bit') : strlen($content);
2
ответ дан chiwangc 16 August 2018 в 01:25
поделиться
3
ответ дан Ivar 16 August 2018 в 01:25
поделиться

Вы можете использовать mb_strlen (), чтобы получить длину байта, используя кодировку, которая имеет только байтовые символы, не беспокоясь о многобайтовых или однобайтовых строках. Например, как отмечает drake127 в комментарии mb_strlen, вы можете использовать кодировку «8bit»:

<?php
    $string = 'Cién cañones por banda';
    echo mb_strlen($string, '8bit');
?>

У вас могут быть проблемы с использованием функции strlen, поскольку php имеет возможность перегрузить strlen, чтобы на самом деле вызвать mb_strlen. Подробнее об этом см. В http://php.net/manual/en/mbstring.overload.php

Для обрезки строки по длине байта без разделения в середине многобайтовый символ вы можете использовать:

mb_strcut(string $str, int $start [, int $length [, string $encoding ]] )
55
ответ дан PhoneixS 16 August 2018 в 01:25
поделиться

Вы имеете в виду размер байта или длину строки?

Размер байта измеряется с помощью strlen() , тогда как длина строки запрашивается с использованием mb_strlen() . Вы можете использовать substr() для обрезки строки в X bytes (обратите внимание, что это приведет к поломке строки, если она имеет многобайтовое кодирование - как указано Darhazer в комментариях) и mb_substr() чтобы обрезать его до X символов в кодировке строки.

21
ответ дан soulmerge 16 August 2018 в 01:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: