Если это содержимое атрибута "content", вы можете сделать это
$str = 'blah blah ¶ … blah blah "words in quotation marks" blah blah "more words in quotation marks" blah blah';
echo htmlentities($str, ENT_QUOTES, "UTF-8", false);
Вывод
blah blah ¶ … blah blah "words in quotation marks" blah blah "more words in quotation marks" blah blah
Песочница
Ключевым моментом здесь является 4-й аргумент
строка htmlentities (строка $ string [, int $ flags = ENT_COMPAT | ENT_HTML401 [, строка $ encoding = ini_get ("default_charset") [, bool $ double_encode = TRUE]]])
В частности
double_encode Когда double_encode выключен, PHP не будет кодировать существующие html-сущности.По умолчанию все конвертируется.
Таким образом, он не выполняет двойное кодирование амперсанда.
htmlspecialchars
также имеет аргумент двойного кодирования.
htmlspecialchars (строка $ string [, int $ flags = ENT_COMPAT | ENT_HTML401 [, строка $ encoding = ini_get ("default_charset") [, bool $ double_encode = TRUE]]])
$str = 'blah blah ¶ … blah blah "words in quotation marks" blah blah "more words in quotation marks" blah blah';
echo htmlspecialchars($str, ENT_QUOTES, "UTF-8", false);
Вывод
blah blah ¶ … blah blah "words in quotation marks" blah blah "more words in quotation marks" blah blah
Песочница
Если это весь тег, вам придется извлечь содержимое и изменить его, а затем заменить так, чтобысохраните <
и >
, но в вопросе, если это так, неясно.
PS Нет большой разницы между htmlspecialchars
и htmlentities
, в основном оно имеетчтобы сделать с é
accute и другими подобными акцентными вещами, htmlentities тоже их кодирует, если я правильно помню.
ОБНОВЛЕНИЕ
Мне нужно решениебыть включены в мой конкретный формат кода PHP (то есть, одна строка PHP, которая поддерживает мy существующие функции / функциональность), как блестяще сделал miken32 выше
Чтобы вставить его в свой код,
<meta name="description" content="<?=htmlspecialchars(word_limiter(trim($paperResult['file_content']),27),ENT_QUOTES,"UTF-8",false);?>"/>
UPDATE2
С preg_replace('/[\r\n]+/', ' ', $string)
удаляет \r\n
или \n
один или несколько раз +
.Но может быть лучше сделать это так preg_replace(['/[\r\n]+/', '/\s+/'], ' ', $string)
.Что также уберет пробел в пробелах.
<meta name="description" content="<?=htmlspecialchars(word_limiter(preg_replace('/[\r\n]+/', ' ', trim($paperResult['file_content'])),27),ENT_QUOTES,"UTF-8",false);?>"/>
По сути, это все, что делает текст короче, чем вы, вероятно, захотите сделать до word_limiter
(что бы это ни было).И любая вещь, которая делает его длиннее, например, изменение "
на "e;
, которое вы, вероятно, захотите сделать после (возможно).Мне это кажется более логичным.
Ура!