Другой аналогичный подход заключается в использовании htaccess mod_rewrite , чтобы игнорировать часть пути при обслуживании файлов. Ваша никогда не кэшированная индексная страница ссылается на последний путь к файлам.
С точки зрения развития это так же просто, как использование параметров для номера версии, но оно столь же устойчиво, как и имя файла.
Используйте проигнорированную часть пути для номера версии, и сервер просто игнорирует его и обслуживает незашифрованный файл.
1.2.3/css/styles.css
служит для того же файла, что и css/styles.css
, поскольку первый каталог разделяется и игнорируется файлом htaccess
Обратите внимание, что этот подход означает, что вам нужно отключить кеширование вашей индексной страницы - Использование & lt; meta & gt; теги, чтобы отключить кеширование во всех браузерах?
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 , чтобы обновить ее.
Вы должны выяснить, закодирована или закодирована строка в формате нескольких байтов.
В первом случае вы можете просто использовать strlen
.
В последнем случае вам нужно найти количество байтов на символ.
документация strlen дает пример того, как это сделать: http://www.php.net/manual/en /function.strlen.php#72274
В дополнение к ответам PhoneixS, чтобы получить правильную длину строки в байтах. Поскольку mb_strlen()
медленнее, чем strlen()
, для лучшей производительности можно проверить установку «mbstring.func_overload» ini, чтобы использовать только mb_strlen()
когда это действительно необходимо:
$content_length = ini_get('mbstring.func_overload') ? mb_strlen($content , '8bit') : strlen($content);
Вы можете использовать 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 ]] )
Вы имеете в виду размер байта или длину строки?
Размер байта измеряется с помощью strlen()
, тогда как длина строки запрашивается с использованием mb_strlen()
. Вы можете использовать substr()
для обрезки строки в X bytes (обратите внимание, что это приведет к поломке строки, если она имеет многобайтовое кодирование - как указано Darhazer в комментариях) и mb_substr()
чтобы обрезать его до X символов в кодировке строки.
strlen()
есть заметка : «strlen () возвращает количество байтов, а не количество символов в строке. & Quot; Не уверен, что это было раньше, но это подтверждает, что этот ответ правильный.
– J.D.
24 March 2015 в 22:31
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:06strlen()
, небезопасно, потому что он может быть перегружен на некоторых установках PHP. – mindplay.dk 27 June 2014 в 12:24