<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to feature-requests</title><link>https://sourceforge.net/p/phputf8/feature-requests/</link><description>Recent changes to feature-requests</description><atom:link href="https://sourceforge.net/p/phputf8/feature-requests/feed.rss" rel="self"/><language>en</language><lastBuildDate>Fri, 30 Oct 2009 19:01:52 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/phputf8/feature-requests/feed.rss" rel="self" type="application/rss+xml"/><item><title>Use preg_quote() instead?</title><link>https://sourceforge.net/p/phputf8/feature-requests/5/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;I'm wondering why some of the functions manually quote meta characters in the regex rather than using preg_quote()?&lt;/p&gt;
&lt;p&gt;//quote charlist for use in a characterclass&lt;br /&gt;
$charlist = preg_replace('!([\\\\\\-\\]\\[/^])!','\\\${1}',$charlist);&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David Pennington</dc:creator><pubDate>Fri, 30 Oct 2009 19:01:52 -0000</pubDate><guid>https://sourceforge.net33010623a49ab400ecfdc4849aa69eef461867e3</guid></item><item><title>Replacing mb_* functions</title><link>https://sourceforge.net/p/phputf8/feature-requests/4/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;After going through this library it seems like it would be easiest to add this code to existing projects by checking for and overriding the mb_* functions as needed. For example, you could do something like this:&lt;/p&gt;
&lt;p&gt;if ( extension_loaded('mbstring') == FALSE ) {&lt;br /&gt;
include('utf8.php');&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;which would contain all the matching string functions (called utf8_*) defined as mb_* functions for a quick drop in place solution to hosts that don't have mutlibyte string support. Perhaps, I'm missing something - but this would seem to be an easier way to implement this very useful function lib.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David Pennington</dc:creator><pubDate>Fri, 30 Oct 2009 18:47:43 -0000</pubDate><guid>https://sourceforge.netf8ff96475e8ca0750a1d56c7d576ccab13ee41f0</guid></item><item><title>Please consider adding utf8_sprintf/utf8_vprintf</title><link>https://sourceforge.net/p/phputf8/feature-requests/3/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;function utf8_sprintf($format) {&lt;br /&gt;
$argv = func_get_args();&lt;br /&gt;
array_shift($argv);&lt;br /&gt;
return utf8_vprintf($format, $argv);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;function utf8_vprintf($format, $arguments) {&lt;br /&gt;
if (mb_internal_encoding() != 'UTF-8') {&lt;br /&gt;
return vsprintf($format, $arguments);&lt;br /&gt;
}&lt;br /&gt;
$newargv = array();&lt;/p&gt;
&lt;p&gt;preg_match_all("`\%('.+|[0 ]|)([1-9][0-9]*|)s`U", $format, $results, PREG_SET_ORDER);&lt;br /&gt;
if (count($results)) {&lt;br /&gt;
foreach($results as $result) {&lt;br /&gt;
list($string_format, $filler, $size) = $result;&lt;br /&gt;
if(strlen($filler) &amp;gt; 1) $filler = substr($filler, 1);&lt;br /&gt;
while(count($arguments) &amp;amp;&amp;amp; !is_string($arg = array_shift($arguments))) $newargv[] = $arg;&lt;br /&gt;
$pos = strpos($format, $string_format);&lt;br /&gt;
$format = substr($format, 0, $pos)&lt;br /&gt;
. ($size ? str_repeat($filler, $size-strlen($arg)) : '')&lt;br /&gt;
. str_replace('%', '%%', $arg)&lt;br /&gt;
. substr($format, $pos+strlen($string_format));&lt;br /&gt;
}&lt;br /&gt;
if (!count($newargv)) {&lt;br /&gt;
return $format;&lt;br /&gt;
} else {&lt;br /&gt;
return vsprintf($format, $newargv);&lt;br /&gt;
}&lt;br /&gt;
} else {&lt;br /&gt;
return vsprintf($format, $arguments);&lt;br /&gt;
}&lt;br /&gt;
}&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">aprisobal</dc:creator><pubDate>Sat, 29 Sep 2007 09:41:36 -0000</pubDate><guid>https://sourceforge.netf2fbf70a42d4e6891eef8999c13230843b7380c1</guid></item><item><title>Please consider adding utf8_wordwrap</title><link>https://sourceforge.net/p/phputf8/feature-requests/2/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;The function is not by me.&lt;/p&gt;
&lt;p&gt;/**&lt;br /&gt;
* Wordwrap for utf8 encoded strings&lt;br /&gt;
* @param string $str&lt;br /&gt;
* @param integer $len&lt;br /&gt;
* @param string $what&lt;br /&gt;
* @return string&lt;br /&gt;
* @author Milian Wolff &amp;lt;mail@milianw.de&amp;gt;&lt;br /&gt;
*/&lt;br /&gt;
function utf8_wordwrap($str, $width, $break=" ", $cut = false){&lt;br /&gt;
if(!$cut){&lt;br /&gt;
$regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){'.$width.',}\b#U';&lt;br /&gt;
} else {&lt;br /&gt;
$regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){'.$width.'}#';&lt;br /&gt;
}&lt;br /&gt;
if(function_exists('mb_strlen')){&lt;br /&gt;
$str_len = mb_strlen($str, 'UTF-8');&lt;br /&gt;
} else {&lt;br /&gt;
$str_len = preg_match_all('/[\x00-\x7F\xC0-\xFD]/', $str, $var_empty);&lt;br /&gt;
}&lt;br /&gt;
$while_what = ceil($str_len / $width);&lt;br /&gt;
$i = 1;&lt;br /&gt;
$return = '';&lt;br /&gt;
while ($i &amp;lt; $while_what){&lt;br /&gt;
if (!preg_match($regexp, $str, $matches)) {&lt;br /&gt;
break;&lt;br /&gt;
}&lt;br /&gt;
$string = $matches[0];&lt;br /&gt;
$return .= $string . $break;&lt;br /&gt;
$str = substr($str,strlen($string));&lt;br /&gt;
$i++;&lt;br /&gt;
}&lt;br /&gt;
return $return.$str;&lt;br /&gt;
}&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">aprisobal</dc:creator><pubDate>Sat, 29 Sep 2007 09:39:29 -0000</pubDate><guid>https://sourceforge.net3f25c326b9cc7ab40f464412a57769c8f902c225</guid></item><item><title>Please consider adding utf8_html_entity_decode</title><link>https://sourceforge.net/p/phputf8/feature-requests/1/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Original author can be found here: (akniep at rayo dot info) &lt;a href="http://www.php.net/manual/en/function.html-entity-decode.php" rel="nofollow"&gt;http://www.php.net/manual/en/function.html-entity-decode.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;function utf8_html_entity_decode($string) {&lt;br /&gt;
static $trans_tbl;&lt;/p&gt;
&lt;p&gt;// replace numeric entities&lt;br /&gt;
$string = preg_replace('~&amp;amp;#x([0-9a-f]+);~ei', 'code2utf(hexdec("\\1"))', $string);&lt;br /&gt;
$string = preg_replace('~&amp;amp;#([0-9]+);~e', 'code2utf(\\1)', $string);&lt;/p&gt;
&lt;p&gt;// replace literal entities&lt;br /&gt;
if (!isset($trans_tbl)) {&lt;br /&gt;
$trans_tbl = array();&lt;br /&gt;
foreach (get_html_translation_table(HTML_ENTITIES) as $val=&amp;gt;$key)&lt;br /&gt;
$trans_tbl[$key] = utf8_encode($val);&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;return strtr($string, $trans_tbl);&lt;br /&gt;
}&lt;br /&gt;
// Returns the utf string corresponding to the unicode value (from php.net, courtesy - romans@void.lv)&lt;/p&gt;
&lt;p&gt;function code2utf($number) {&lt;br /&gt;
if ($number &amp;lt; 0) return FALSE;&lt;br /&gt;
if ($number &amp;lt; 128) return chr($number);&lt;br /&gt;
// Removing / Replacing Windows Illegals Characters&lt;br /&gt;
if ($number &amp;lt; 160) {&lt;br /&gt;
if ($number==128) $number=8364;&lt;br /&gt;
elseif ($number==129) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped to the saved-space #160&lt;br /&gt;
elseif ($number==130) $number=8218;&lt;br /&gt;
elseif ($number==131) $number=402;&lt;br /&gt;
elseif ($number==132) $number=8222;&lt;br /&gt;
elseif ($number==133) $number=8230;&lt;br /&gt;
elseif ($number==134) $number=8224;&lt;br /&gt;
elseif ($number==135) $number=8225;&lt;br /&gt;
elseif ($number==136) $number=710;&lt;br /&gt;
elseif ($number==137) $number=8240;&lt;br /&gt;
elseif ($number==138) $number=352;&lt;br /&gt;
elseif ($number==139) $number=8249;&lt;br /&gt;
elseif ($number==140) $number=338;&lt;br /&gt;
elseif ($number==141) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped to the saved-space #160&lt;br /&gt;
elseif ($number==142) $number=381;&lt;br /&gt;
elseif ($number==143) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped to the saved-space #160&lt;br /&gt;
elseif ($number==144) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped to the saved-space #160&lt;br /&gt;
elseif ($number==145) $number=8216;&lt;br /&gt;
elseif ($number==146) $number=8217;&lt;br /&gt;
elseif ($number==147) $number=8220;&lt;br /&gt;
elseif ($number==148) $number=8221;&lt;br /&gt;
elseif ($number==149) $number=8226;&lt;br /&gt;
elseif ($number==150) $number=8211;&lt;br /&gt;
elseif ($number==151) $number=8212;&lt;br /&gt;
elseif ($number==152) $number=732;&lt;br /&gt;
elseif ($number==153) $number=8482;&lt;br /&gt;
elseif ($number==154) $number=353;&lt;br /&gt;
elseif ($number==155) $number=8250;&lt;br /&gt;
elseif ($number==156) $number=339;&lt;br /&gt;
elseif ($number==157) $number=160; // (Rayo:) #129 using no relevant sign, thus, mapped to the saved-space #160&lt;br /&gt;
elseif ($number==158) $number=382;&lt;br /&gt;
elseif ($number==159) $number=376;&lt;br /&gt;
} //if&lt;/p&gt;
&lt;p&gt;if ($number &amp;lt; 2048) return chr(($number &amp;gt;&amp;gt; 6) + 192) . chr(($number &amp;amp; 63) + 128);&lt;br /&gt;
if ($number &amp;lt; 65536) return chr(($number &amp;gt;&amp;gt; 12) + 224) . chr((($number &amp;gt;&amp;gt; 6) &amp;amp; 63) + 128) . chr(($number &amp;amp; 63) + 128);&lt;br /&gt;
if ($number &amp;lt; 2097152) return chr(($number &amp;gt;&amp;gt; 18) + 240) . chr((($number &amp;gt;&amp;gt; 12) &amp;amp; 63) + 128) . chr((($number &amp;gt;&amp;gt; 6) &amp;amp; 63) + 128) . chr(($number &amp;amp; 63) + 128);&lt;/p&gt;
&lt;p&gt;return false;&lt;br /&gt;
}&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Kingsquare</dc:creator><pubDate>Tue, 28 Aug 2007 08:49:11 -0000</pubDate><guid>https://sourceforge.netd4bb5cb3722b99d4f8fc5478e6a2b1cdd4579859</guid></item></channel></rss>