Простой типограф на PHP

Наверное это самый простой типограф из всех существующих, в нём не хватает многих возможностей, но это легко добавить самостоятельно. Самое главное, что он умеет, это расставлять вложенные кавычки.

  • “Расставляются кавычки “ёлочки”, причем кавычки могут быть “вложенными”.”
  • Длинное тире - вместо знака “минус”.
  • Непереносимый пробел ( ) после коротких слов.
  • Символ многоточия заменяется на три точки… (ибо нефиг)

Работает только с UTF-8 строками, и результат выдаёт в этой же кодировке. Если вы ещё используете однобайтовые кодировки, то похоже что вы проспали 10 лет, уже 21 век на дворе. Советую потратить усилия, и отказаться от архаичных кодировок в своих разработках, переходите на юникод.

Пример работы типографа: http://ibnteo.klava.org/php/typograph.php

Исходный код:

<?php
function typograph($text) {
	$text = html_entity_decode($text, ENT_QUOTES, 'utf-8');
	$arr = array(
		// Убираем символ троеточия
		'/…/u' => '...',
		// Кавычки «ёлочки» &laquo; &raquo;
		'/(^|[\s;\(\[-])"/' => '$1«',
		'/"([\s-\.!,:;\?\)\]\n\r]|$)/' => '»$1',
		'/([^\s])"([^\s])/' => '$1»$2',
		// Длинное тире &mdash;
		'/(^|\n|["„«])--?(\s)/u' => '$1—$2',
		'/(\s)--?(\s)/' => ' —$2',
		// Непереносимый проблел после коротких слов &nbsp;
		'/([\s][a-zа-яё]{1,2})[ ]/iu' => '$1 '
	);
	foreach ($arr as $key=>$val) {
		$text = preg_replace($key, $val, $text);
	}
	// Вложенные кавычки &bdquo; &ldquo;
	while (preg_match('/(«[^«»]*)«/mu', $text)) {
		$text = preg_replace('/(«[^«»]*)«/mu', '$1„', $text);
		$text = preg_replace('/(„[^„“«»]*)»/mu', '$1“', $text);
	}
	return $text;
}
blog comments powered by Disqus
Яндекс.Метрика