Замена кавычек на «ёлочки» PHP

Для форматирования текста иногда требуется заменить все кавычки в тексте на французские «ёлочки», сделать это можно с помощью PHP-функции:

function replace_quotes($text)
{
	$text = htmlspecialchars_decode($text, ENT_QUOTES);
	$text = str_replace(array('«', '»'), '"', $text);
	return preg_replace_callback('/(([\"]{2,})|(?![^\W])(\"))|([^\s][\"]+(?![\w]))/u', 'replace_quotes_callback', $text);
}

function replace_quotes_callback($matches)
{
	if (count($matches) == 3) {
		return '«»';
	} elseif (!empty($matches[1])) {
		return str_replace('"', '«', $matches[1]);
	} else { 
		return str_replace('"', '»', $matches[4]);
	}
}
PHP

Использование

$text = '
	"В чащах юга жил бы цитрус?"
	"В чащах юга" жил бы "цитрус"!
	"В чащах юга жил бы "цитрус"?
	"В" чащах юга жил бы цитрус?"
';

echo replace_quotes($text);
PHP

Результат

«В чащах юга жил бы цитрус?»
«В чащах юга» жил бы «цитрус»!
«В чащах юга жил бы «цитрус»?
«В» чащах юга жил бы цитрус?»
20.08.2019 , обновлено 15.10.2019
Предыдущая запись Как выделить фразы в тексте
Следующая запись Верстка списка с отточием

Комментарии

, чтобы добавить комментарий.

Другие публикации

Генерация паролей в PHP
В PHP есть несколько функций для генерации случайного числа, это rand(), mt_rand() и random_int().
28.11.2019
2085
+3
PHP транслит
PHP функции для перевода текста, ЧПУ, ссылок и имен файлов в транслит.
24.03.2019
4984
+4
Шорткоды на регулярных выражениях
Часто на сайтах возникает необходимость вставлять в тексты страниц информационные блоки - баннеры, телефоны и т.д. Как...
17.03.2018
1998
+1
Генерация счета на оплату PDF PHP
С помощью расширения dompdf можно легко сформировать PDF файл. По сути, dompdf - это конвертер HTML в PDF который...
16.02.2018
19052
+8
Удаление регулярными выражениями в PHP
Примеры регулярных выражений для удаления данных из текста.
31.03.2018
12068
+2
Автоматическое сжатие и оптимизация картинок на сайте
Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет...
26.10.2018
6077
+5