#php #string-length #strlen #meta-title
#php #длина строки #strlen #мета-заголовок
Вопрос:
Я использую 4 части для создания мета-заголовка из моего контента. Теперь я хочу ограничить мета-заголовок 55 символами и вырезать части из заголовка. Но я не хочу вырезать внутри слова. Вместо этого я хочу проверить длину заголовка и удалять части с конца, пока весь заголовок снова не окажется ниже 55.
Я использую следующие части, например:
$product_name
= название продукта — например, MacBook Pro — 11$product_brand
= название бренда — как Apple — 5$product_action
= название продукта — купить онлайн — 9$product_store
= название продукта — в имени магазина — 9
В совокупности это 41 символ. Итак, все в порядке.
Но если у меня есть что-то вроде этого (75 символов):
Surface Pro X black 64 ГБ, 512 ГБ 5G / Wifi Microsoft купить онлайн в магазине
Я хочу свести ее к этому:
Surface Pro X black 64 ГБ, 512 ГБ 5G /Wifi Microsoft
Потому что это заголовок, содержащий менее 55 символов. Я удалил product_action
и product_store
.
На данный момент я использую объединенную строку и считаю символы:
$product_title = $product_name.' '.$product_brand.' '.$product_action.' '.$product_store;
$product_title_count = strlen($product_title);
Есть ли разумный способ сгенерировать подобный заголовок?
На данный момент я использую оператор if / else, который плохо работает.
Комментарии:
1. Технически, все 4 вещи вместе взятые могут содержать максимум 52 символа с разделением 3 пробелами. Что, если слова будут сокращены, если вы хотите только до 55?
Ответ №1:
Это должно сработать, оно урежет вашу строку до ближайшего символа пробела (‘ ‘) длиной менее 55 символов.
$i = strlen($product_title)-1;
while($product_title[$i] != ' ' || $i > 55){
$i--;
}
$final_string = substr($product_title, 0, $i);
Комментарии:
1. Используя строку OP «Surface Pro X black 64 ГБ, 512 ГБ 5G / Wifi Microsoft купить онлайн в Storename», ваш код возвращает «Surface Pro X black 64 ГБ, 512 ГБ 5G / Wifi Microsoft купить». Как обрезать ее сразу после «Microsoft»?
2. Это строка длиной 55 символов, что, если вы поместите $ i > 54 ?
3. То же самое, если вы ставите
$i > 53
или$i > 52
… Это не ограничение.4. Я попробовал это здесь , и он усекает ‘buy’ с условием ($ i > 54)
5. То же самое здесь, это то, что я сказал. Но он усекает «купить» даже с помощью
$i > 53
или$i > 52
. Итак, проблема, на которую я указал, заключается не в этом условии.
Ответ №2:
поместите это перед кодом @Agnohendrix
$product_title = $product_name.' '.$product_brand.' '.$product_action.' '.$product_store;
$product_title_count = strlen($product_title);
if($product_title_count > 55){
$product_title = $product_name.' '.$product_brand.' '.$product_action;
$product_title_count = strlen($product_title);
}
elseif($product_title_count > 55){
$product_title = $product_name.' '.$product_brand;
}