Простой типограф на 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;
}

02 июня 2012

php f2