<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF74-75%3APHP2</id>
		<title>LXF74-75:PHP2 - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF74-75%3APHP2"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF74-75:PHP2&amp;action=history"/>
		<updated>2026-05-13T17:49:26Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF74-75:PHP2&amp;diff=5823&amp;oldid=prev</id>
		<title>Yaleks: викификация</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF74-75:PHP2&amp;diff=5823&amp;oldid=prev"/>
				<updated>2008-12-06T13:41:12Z</updated>
		
		<summary type="html">&lt;p&gt;викификация&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 13:41, 6 декабря 2008&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Цикл/PHP}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Цикл/PHP}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Многобайтовые строки ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Многобайтовые строки ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;''Правильно ли выполняются ваши PHP-скрипты для всех иностранных языков? '''Пол Хадсон''' (Paul Hudson) открывает свой разговорник…''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;''Правильно ли выполняются ваши PHP-скрипты для всех иностранных языков? '''Пол Хадсон''' (Paul Hudson) открывает свой разговорник…''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 5:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 6:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Несмотря на несколько грубое звучание, ASCII (American&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Несмотря на несколько грубое звучание, ASCII (American&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Standard Code for Information Interchange, произносится как&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Standard Code for Information Interchange, произносится как&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;“ass&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;key”&lt;/del&gt;, «ключ от задницы») &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;– &lt;/del&gt;возможно один из самых&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;«ass&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;key»&lt;/ins&gt;, «ключ от задницы»)&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; — &lt;/ins&gt;возможно один из самых&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;популярных стандартов из когда-либо изобретенных. ASCII был разработан как семибитная кодировка для латинских символов, используемых в английском языке. На каждый знак отводится 7 бит: таким образом можно записать 127 различных символов, включая все цифры и&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;популярных стандартов из когда-либо изобретенных. ASCII был разработан как семибитная кодировка для латинских символов, используемых в английском языке. На каждый знак отводится 7 бит: таким образом можно записать 127 различных символов, включая все цифры и&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;буквы (строчные и прописные), плюс символы пунктуации и управляющие &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;символы – &lt;/del&gt;этого вполне достаточно для хранения текста.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;буквы (строчные и прописные), плюс символы пунктуации и управляющие &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;символы — &lt;/ins&gt;этого вполне достаточно для хранения текста.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Настоящий американец, ASCII совершенно игнорирует нужды&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Настоящий американец, ASCII совершенно игнорирует нужды&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;остального &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;мира – &lt;/del&gt;элементарные вещи как, например, дополнительные&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;остального &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;мира — &lt;/ins&gt;элементарные вещи как, например, дополнительные&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;символы в скандинавских языках или около 90 000 символов Ханьшуй,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;символы в скандинавских языках или около 90 000 символов Ханьшуй,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;необходимых китайским пользователям для свободного чтения и письма, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;или... &lt;/del&gt;Конечно же, это несправедливая критика, ведь 40 лет назад&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;необходимых китайским пользователям для свободного чтения и письма, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;или… &lt;/ins&gt;Конечно же, это несправедливая критика, ведь 40 лет назад&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;для компьютера это было слишком сложно, но верно и то, что явное&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;для компьютера это было слишком сложно, но верно и то, что явное&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;преобладание ASCII уверило многих программистов в том, что они могут&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;преобладание ASCII уверило многих программистов в том, что они могут&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 19:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 20:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Если для ASCII достаточно 1 байта (дополнительный бит обычно&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Если для ASCII достаточно 1 байта (дополнительный бит обычно&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;установлен в ноль), то другие языки требуют многобайтовых строк &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;–&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;установлен в ноль), то другие языки требуют многобайтовых строк &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;более 1 байта на каждый знак. Стандартные операторы PHP не работают с многобайтовыми строками, что подразумевает создание нового&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;более 1 байта на каждый знак. Стандартные операторы PHP не работают с многобайтовыми строками, что подразумевает создание нового&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;набора функций, поддерживающих многобайтовость. К счастью, PHP&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;набора функций, поддерживающих многобайтовость. К счастью, PHP&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;позволяет сделать это очень легко (естественно), так что приступим!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;позволяет сделать это очень легко (естественно), так что приступим!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== ПОЧЕМУ &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ОДНОБАЙТОВОСТЬ – &lt;/del&gt;ЭТО ПЛОХО ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== ПОЧЕМУ &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ОДНОБАЙТОВОСТЬ — &lt;/ins&gt;ЭТО ПЛОХО ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Норвегия: земля фиордов, полуночного солнца и распивания украденного эля из пупков юных дев. Действительно превосходный край! Но&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Норвегия: земля фиордов, полуночного солнца и распивания украденного эля из пупков юных дев. Действительно превосходный край! Но&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;что случается, когда вы возвращаетесь из поездки домой и обнаруживаете, что не можете разместить рассказ о посещенных вами местах на&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;что случается, когда вы возвращаетесь из поездки домой и обнаруживаете, что не можете разместить рассказ о посещенных вами местах на&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 30:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 31:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Рассмотрим, к примеру, сонный норвежский город Mj ndalen. Это красивое место с холмами, тихой рекой и лесами, где может разместиться&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Рассмотрим, к примеру, сонный норвежский город Mj ndalen. Это красивое место с холмами, тихой рекой и лесами, где может разместиться&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;армия белок. Однако, название города содержит нелатинский символ&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;армия белок. Однако, название города содержит нелатинский символ&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;« »&lt;/del&gt;, что эквивалентно звуку «ё» в слове Гётеборг. Он не может быть&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;quot; &amp;quot;&lt;/ins&gt;, что эквивалентно звуку «ё» в слове Гётеборг. Он не может быть&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;набран в ASCII, следовательно при обработке названия стандартными&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;набран в ASCII, следовательно при обработке названия стандартными&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;строковыми функциями PHP возникнут проблемы. Например:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;строковыми функциями PHP возникнут проблемы. Например:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 36:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 37:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;$string = &amp;quot;Mj ndalen&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;$string = &amp;quot;Mj ndalen&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;echo strtoupper($string), &amp;quot;\n&amp;quot;;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;echo strtoupper($string), &amp;quot;\n&amp;quot;;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;выдаст результат: «Mj ndalen», &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;т. е. &lt;/del&gt;все символы отобразились в верхнем регистре кроме . Это неправильно, хотя на самом деле не так уж&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;выдаст результат: «Mj ndalen», &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;то есть &lt;/ins&gt;все символы отобразились в верхнем регистре кроме . Это неправильно, хотя на самом деле не так уж&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;и &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;критично – &lt;/del&gt;смысл все еще сохраняется, даже если название выглядит слегка неприятно для глаз.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;и &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;критично — &lt;/ins&gt;смысл все еще сохраняется, даже если название выглядит слегка неприятно для глаз.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Однако могут быть проблемы и похуже:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Однако могут быть проблемы и похуже:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;echo strlen($string), &amp;quot;\n&amp;quot;;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;echo strlen($string), &amp;quot;\n&amp;quot;;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Эта строка выводит число 10 для строки, содержащей 9 символов,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Эта строка выводит число 10 для строки, содержащей 9 символов,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;потому что PHP неправильно посчитал буквы благодаря многобайтовому символу &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;« »&lt;/del&gt;. В этом случае мы имеем ошибку завышения на&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;потому что PHP неправильно посчитал буквы благодаря многобайтовому символу &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;quot; &amp;quot;&lt;/ins&gt;. В этом случае мы имеем ошибку завышения на&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;единицу, которая будет нарастать с увеличением числа многобайтовых символов.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;единицу, которая будет нарастать с увеличением числа многобайтовых символов.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 48:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 49:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Решение проблемы заключается в использовании многобайтовых&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Решение проблемы заключается в использовании многобайтовых&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;функций из библиотеки PHP. Вместо strlen() следует использовать&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;функций из библиотеки PHP. Вместо strlen() следует использовать&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;mb_strlen(); вместо substr() &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;– &lt;/del&gt;mb_substr(), и так далее. Многие&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;mb_strlen(); вместо substr()&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; — &lt;/ins&gt;mb_substr(), и так далее. Многие&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;строковые функции имеют прямой многобайтовый аналог, который вы&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;строковые функции имеют прямой многобайтовый аналог, который вы&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;можете использовать, просто добавив приставку mb к вызову функции.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;можете использовать, просто добавив приставку mb к вызову функции.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Список параметров остается почти тем же и, таким образом, имеется&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Список параметров остается почти тем же и, таким образом, имеется&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;достаточно функций для работы: mb_strtoupper(), mb_parse_str(),&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;достаточно функций для работы: mb_strtoupper(), mb_parse_str(),&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;mb_ereg_match(), mb_split()&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;...&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;mb_ereg_match(), mb_split()&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;…&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Некоторые функции имеют не столь очевидные имена, но вы всегда можете найти их в справочном руководстве PHP. Например, многобайтовым эквивалентом для mail() будет mb_send_mail(), а функции&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Некоторые функции имеют не столь очевидные имена, но вы всегда можете найти их в справочном руководстве PHP. Например, многобайтовым эквивалентом для mail() будет mb_send_mail(), а функции&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 91:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 92:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;mbstring.func_overload представляет собой битовое поле, которое&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;mbstring.func_overload представляет собой битовое поле, которое&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;вы можете установить в одно из следующих положений:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;вы можете установить в одно из следующих положений:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;0 – &lt;/del&gt;отключить поддержку; использовать однобайтовые функции.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;0 — &lt;/ins&gt;отключить поддержку; использовать однобайтовые функции.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;1 – &lt;/del&gt;использовать подстановку для mail()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;1 — &lt;/ins&gt;использовать подстановку для mail()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;2 – &lt;/del&gt;использовать подстановку для всех функций str*().&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;2 — &lt;/ins&gt;использовать подстановку для всех функций str*().&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;4 – &lt;/del&gt;использовать подстановку для всех функций ereg*().&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;4 — &lt;/ins&gt;использовать подстановку для всех функций ereg*().&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Вы можете также указать комбинацию режимов, просто сложив&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Вы можете также указать комбинацию режимов, просто сложив&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;указанные числа. Например, значение 3 заставляет использовать подстановки для функции mail() и всех функции str*(), а значение 6 указывает на необходимость использования подстановок для всех str*()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;указанные числа. Например, значение 3 заставляет использовать подстановки для функции mail() и всех функции str*(), а значение 6 указывает на необходимость использования подстановок для всех str*()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF74-75:PHP2&amp;diff=5822&amp;oldid=prev</id>
		<title>Yaleks: Новая: {{Цикл/PHP}} == Многобайтовые строки == ''Правильно ли выполняются ваши PHP-скрипты для всех иностранных язы...</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF74-75:PHP2&amp;diff=5822&amp;oldid=prev"/>
				<updated>2008-12-06T13:40:03Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: {{Цикл/PHP}} == Многобайтовые строки == &amp;#039;&amp;#039;Правильно ли выполняются ваши PHP-скрипты для всех иностранных язы...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Цикл/PHP}}&lt;br /&gt;
== Многобайтовые строки ==&lt;br /&gt;
''Правильно ли выполняются ваши PHP-скрипты для всех иностранных языков? '''Пол Хадсон''' (Paul Hudson) открывает свой разговорник…''&lt;br /&gt;
&lt;br /&gt;
Несмотря на несколько грубое звучание, ASCII (American&lt;br /&gt;
Standard Code for Information Interchange, произносится как&lt;br /&gt;
“ass-key”, «ключ от задницы») – возможно один из самых&lt;br /&gt;
популярных стандартов из когда-либо изобретенных. ASCII был разработан как семибитная кодировка для латинских символов, используемых в английском языке. На каждый знак отводится 7 бит: таким образом можно записать 127 различных символов, включая все цифры и&lt;br /&gt;
буквы (строчные и прописные), плюс символы пунктуации и управляющие символы – этого вполне достаточно для хранения текста.&lt;br /&gt;
&lt;br /&gt;
Настоящий американец, ASCII совершенно игнорирует нужды&lt;br /&gt;
остального мира – элементарные вещи как, например, дополнительные&lt;br /&gt;
символы в скандинавских языках или около 90 000 символов Ханьшуй,&lt;br /&gt;
необходимых китайским пользователям для свободного чтения и письма, или... Конечно же, это несправедливая критика, ведь 40 лет назад&lt;br /&gt;
для компьютера это было слишком сложно, но верно и то, что явное&lt;br /&gt;
преобладание ASCII уверило многих программистов в том, что они могут&lt;br /&gt;
работать только с латиницей. В действительности люди хотят общаться&lt;br /&gt;
на своем собственном языке, что требует дополнительных усилий.&lt;br /&gt;
&lt;br /&gt;
Если для ASCII достаточно 1 байта (дополнительный бит обычно&lt;br /&gt;
установлен в ноль), то другие языки требуют многобайтовых строк –&lt;br /&gt;
более 1 байта на каждый знак. Стандартные операторы PHP не работают с многобайтовыми строками, что подразумевает создание нового&lt;br /&gt;
набора функций, поддерживающих многобайтовость. К счастью, PHP&lt;br /&gt;
позволяет сделать это очень легко (естественно), так что приступим!&lt;br /&gt;
&lt;br /&gt;
=== ПОЧЕМУ ОДНОБАЙТОВОСТЬ – ЭТО ПЛОХО ===&lt;br /&gt;
Норвегия: земля фиордов, полуночного солнца и распивания украденного эля из пупков юных дев. Действительно превосходный край! Но&lt;br /&gt;
что случается, когда вы возвращаетесь из поездки домой и обнаруживаете, что не можете разместить рассказ о посещенных вами местах на&lt;br /&gt;
своем сайте, разработанном без поддержки многобайтовых символов?&lt;br /&gt;
Рассмотрим, к примеру, сонный норвежский город Mj ndalen. Это красивое место с холмами, тихой рекой и лесами, где может разместиться&lt;br /&gt;
армия белок. Однако, название города содержит нелатинский символ&lt;br /&gt;
« », что эквивалентно звуку «ё» в слове Гётеборг. Он не может быть&lt;br /&gt;
набран в ASCII, следовательно при обработке названия стандартными&lt;br /&gt;
строковыми функциями PHP возникнут проблемы. Например:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
$string = &amp;quot;Mj ndalen&amp;quot;;&lt;br /&gt;
echo strtoupper($string), &amp;quot;\n&amp;quot;;&amp;lt;/source&amp;gt;&lt;br /&gt;
выдаст результат: «Mj ndalen», т. е. все символы отобразились в верхнем регистре кроме . Это неправильно, хотя на самом деле не так уж&lt;br /&gt;
и критично – смысл все еще сохраняется, даже если название выглядит слегка неприятно для глаз.&lt;br /&gt;
&lt;br /&gt;
Однако могут быть проблемы и похуже:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;echo strlen($string), &amp;quot;\n&amp;quot;;&amp;lt;/source&amp;gt;&lt;br /&gt;
Эта строка выводит число 10 для строки, содержащей 9 символов,&lt;br /&gt;
потому что PHP неправильно посчитал буквы благодаря многобайтовому символу « ». В этом случае мы имеем ошибку завышения на&lt;br /&gt;
единицу, которая будет нарастать с увеличением числа многобайтовых символов.&lt;br /&gt;
&lt;br /&gt;
=== МНОГОБАЙТОВЫЕ ФУНКЦИИ ===&lt;br /&gt;
Решение проблемы заключается в использовании многобайтовых&lt;br /&gt;
функций из библиотеки PHP. Вместо strlen() следует использовать&lt;br /&gt;
mb_strlen(); вместо substr() – mb_substr(), и так далее. Многие&lt;br /&gt;
строковые функции имеют прямой многобайтовый аналог, который вы&lt;br /&gt;
можете использовать, просто добавив приставку mb к вызову функции.&lt;br /&gt;
Список параметров остается почти тем же и, таким образом, имеется&lt;br /&gt;
достаточно функций для работы: mb_strtoupper(), mb_parse_str(),&lt;br /&gt;
mb_ereg_match(), mb_split()...&lt;br /&gt;
&lt;br /&gt;
Некоторые функции имеют не столь очевидные имена, но вы всегда можете найти их в справочном руководстве PHP. Например, многобайтовым эквивалентом для mail() будет mb_send_mail(), а функции&lt;br /&gt;
strtoupper() /strtolower() заменены одной унифицированной mb_convert_case(). Ключевой особенностью является то, что они работают и с обычными ASCII-символами, то есть вы можете использовать их&lt;br /&gt;
на своем сайте и никто не увидит разницы.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы начать работать с многобайтовыми строкам, и вы&lt;br /&gt;
должны перекомпилировать PHP и указать параметр --enablembstring=all в качестве ключа сценария ./configure; это задействует&lt;br /&gt;
многобайтовые функции. Затем следует произвести небольшие изменения в вашем файле php.ini. Найдите параметр mbstring.internal_encoding’ (или добавьте если его нет), и присвойте ему значение&lt;br /&gt;
UTF-8. Это общий формат Unicode, использующий различную длину&lt;br /&gt;
в байтах для различных символов, что сокращает занимаемый ими&lt;br /&gt;
размер. Например, для символов ASCII используется один байт, большинство европейских и ближневосточных языков используют два байта, а восточноазиатские используют три.&lt;br /&gt;
&lt;br /&gt;
Теперь относительно кодирования. Помните, ранее я сказал, что&lt;br /&gt;
«список параметров остается почти таким же», вместо «список параметров остается точно таким же». Разница заключается в том, что&lt;br /&gt;
каждая функция имеет дополнительный параметр, добавляемый в&lt;br /&gt;
конце списка и позволяющий вам указать тип кодировки для группы&lt;br /&gt;
символов. По умолчанию мы установили кодировку UTF-8, которая&lt;br /&gt;
подходит для большинства случаев. Но если у вас во входящих данных попали символы особого типа и вы хотите сохранить их правильно, то вам следует указать кодировку с помощью этого дополнительного параметра.&lt;br /&gt;
&lt;br /&gt;
Многобайтовые строковые функции работают с большим количеством производных от UNICODE кодировок, например с UCS-4 и UTF-16&lt;br /&gt;
до специфических языковых кодировок, таких как SJIS (Японская), Big-5 (Китайская), KOI-8R (русская) и так далее. Для принудительного&lt;br /&gt;
использования какой-либо кодировки, укажите ее название в виде&lt;br /&gt;
строкового параметра в конце списка.&lt;br /&gt;
&lt;br /&gt;
Если вы не планируете использовать&lt;br /&gt;
какую-то другую кодировку, кроме внутренней, установленной по умолчанию, то&lt;br /&gt;
существует специальный параметр в php.ini, позволяющий сберечь много часов&lt;br /&gt;
работы и использовать ваши готовые сценарии (скрипты), не отвлекаясь на многобайтовые строки. Он называется&lt;br /&gt;
mbstring.func_overload, и его действие&lt;br /&gt;
заключается в простом конвертировании&lt;br /&gt;
существующих функций, таких как&lt;br /&gt;
strtoupper() и mail(), в их многобайтовые аналоги. Когда этот параметр задействован, вы можете использовать&lt;br /&gt;
strtoupper() также как и обычно, а PHP&lt;br /&gt;
динамически подставит и выполнит функцию mb_convert_case(),&lt;br /&gt;
используя установленную по умолчанию кодировку. Параметр&lt;br /&gt;
mbstring.func_overload представляет собой битовое поле, которое&lt;br /&gt;
вы можете установить в одно из следующих положений:&lt;br /&gt;
* 0 – отключить поддержку; использовать однобайтовые функции.&lt;br /&gt;
* 1 – использовать подстановку для mail()&lt;br /&gt;
* 2 – использовать подстановку для всех функций str*().&lt;br /&gt;
* 4 – использовать подстановку для всех функций ereg*().&lt;br /&gt;
Вы можете также указать комбинацию режимов, просто сложив&lt;br /&gt;
указанные числа. Например, значение 3 заставляет использовать подстановки для функции mail() и всех функции str*(), а значение 6 указывает на необходимость использования подстановок для всех str*()&lt;br /&gt;
и всех ereg*() функций, но оставляет неизменной функцию mail().&lt;br /&gt;
Для конвертирования всех функций необходимо использовать значение 7. Многие параметры PHP могут быть установлены для определенной директории при помощи файлов .htaccess, но это не рекомендуется при использовании опции mbstring.func_overload. Как утверждают разработчики, это приводит к нестабильности. Указывайте этот&lt;br /&gt;
параметр в файле php.ini и не трогайте его.&lt;br /&gt;
&lt;br /&gt;
Если вы дочитали до этого места, а также посмотрели врезку&lt;br /&gt;
Унифицируем UNICODE (ниже), то тогда вы способны написать свой&lt;br /&gt;
собственный многобайтовый сценарий, используя опцию mbstring.&lt;br /&gt;
func_overload, преобразовать чужие скрипты в целях обеспечения&lt;br /&gt;
совместимости с многобайтовыми строками, а также сохранить новый&lt;br /&gt;
многобайтовый текст в вашей базе данных с указанием подходящего набора символов. Мы все еще продолжаем работать преимущественно в ASCII, потому что решиться на переход не так&lt;br /&gt;
просто, но дело того стоит. Мир уже плотно оплетен&lt;br /&gt;
Глобальной Сетью, поэтому online-магазины и сайты новостей,&lt;br /&gt;
не понимающие этого факта просто покинут рынок, открытый&lt;br /&gt;
для тех, кто понял. Удачи!&lt;br /&gt;
&lt;br /&gt;
{{Врезка|center|&lt;br /&gt;
|Заголовок=УНИФИКАЦИЯ UNICODE&lt;br /&gt;
|Содержание=&lt;br /&gt;
;Сохранение многобайтовых элементов в вашей базе данных.&lt;br /&gt;
&lt;br /&gt;
В отличие от PHP, MySQL обладает собственной продвинутой системой для работы с символами не-английских языков, возможно потому, что он разработан в Швеции. MySQL&lt;br /&gt;
работает с UTF-8 просто прекрасно, а так как мы сделали&lt;br /&gt;
UTF-8 международной кодировкой по умолчанию и для&lt;br /&gt;
PHP, то налицо полное совпадение кодировок. Для указания типа набора символов, при создании таблицы используется оператор CHARACTER SET, например так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;CREATE TABLE Writers (ID INT PRIMARY KEY NOT&lt;br /&gt;
NULL AUTO_INCREMENT, Name VARCHAR(100),&lt;br /&gt;
HomeTown VARCHAR(30)) TYPE=InnoDB CHARACTER&lt;br /&gt;
SET utf8;&amp;lt;/source&amp;gt;&lt;br /&gt;
Эта конструкция создает таблицу из двух столбцов&lt;br /&gt;
(Name и HomeTown), которые хранят строки с символами&lt;br /&gt;
переменной длины в формате UTF-8. Если вы знаете, как&lt;br /&gt;
работает UTF-8, то вспомните, что каждый символ в UTF-8&lt;br /&gt;
имеет переменную длину (variable-length) от 1 до 3 байт.&lt;br /&gt;
MySQL не знает, какие символы вы будете использовать, а&lt;br /&gt;
значит, для поля типа CHAR будет зарезервировано максимальное количество байт. Например, 10 латинских символов в кодировке UTF-8 занимают 10 байт, в то время как 10&lt;br /&gt;
японских – 30 байт. Если у вас есть поле CHAR(30), то будет&lt;br /&gt;
использоваться именно 30 байт вне зависимости от типа&lt;br /&gt;
символа. Если вы используете поле VARCHAR(30), то латинские символы будут занимать только 10 байт.&lt;br /&gt;
&lt;br /&gt;
Так же как и PHP, MySQL поддерживает множество&lt;br /&gt;
кодировок, не относящихся к UNICODE; вы можете увидеть&lt;br /&gt;
те, которые доступны вам, выполнив запрос «SHOW&lt;br /&gt;
CHARACTERS SET». Однако, использование этих кодировок&lt;br /&gt;
может отличаться для разных приложений, разных версий&lt;br /&gt;
приложений, и потенциально даже для разных платформ;&lt;br /&gt;
как говорится: не все работает так, как задумывалось!&lt;br /&gt;
&lt;br /&gt;
При использовании PostgreSQL вам доступен большой&lt;br /&gt;
набор многобайтовых кодировок, и вы можете включить их&lt;br /&gt;
в базу данных, используя параметр WITH ENCODING оператора CREATE DATABASE. Например, для создания БД с поддержкой русского языка вы должны дать команду:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;CREATE DATABASE people WITH ENCODING 'KOI8';&amp;lt;/source&amp;gt;&lt;br /&gt;
Есть небольшая особенность использования UNICODE&lt;br /&gt;
в PostgreSQL. Дело в том, что при указании значения&lt;br /&gt;
UNICODE как типа кодировки в действительности автоматически устанавливается UTF-8. Во многих других приложениях синонимом UNICODE является кодировка UTF-16,&lt;br /&gt;
которая использует символы фиксированной длины;&lt;br /&gt;
попытка соединить эти два типа приводит к большим проблемам. Лучшим решением в этом случае будет избегать&lt;br /&gt;
неопределенности. Если вам нужна кодировка UTF-8 –&lt;br /&gt;
укажите это явно.&lt;br /&gt;
|Ширина=}}&lt;/div&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	</feed>