Дополнительные методы (правовая оговорка: полностью непротестированный код, BTW...):
public static class ByteExtensions
{
public static string ToHexString(this byte[] ba)
{
StringBuilder hex = new StringBuilder(ba.Length * 2);
foreach (byte b in ba)
{
hex.AppendFormat("{0:x2}", b);
}
return hex.ToString();
}
}
и т.д. Используйте любой из три решения Tomalak (с последним, являющимся дополнительным методом на строке).
Как этот? http://us2.php.net/manual/en/function.setlocale.php
* LC_ALL for all of the below
* LC_COLLATE for string comparison, see strcoll()
* LC_CTYPE for character classification and conversion, for example strtoupper()
* LC_MONETARY for localeconv()
* LC_NUMERIC for decimal separator (See also localeconv())
* LC_TIME for date and time formatting with strftime()
* LC_MESSAGES for system responses (available if PHP was compiled with libintl)
Существует C-функция define_charset (char * charset_hint ...) , которая используется для поиска "правильной" кодировки на основе
в этом порядке и в зависимости от того, расширения встроены или нет.
«Проблема» в том, что когда вы вызываете htmlentities ('xyz') , этот define_charset () вызывается с charset_hint = NULL, и первая эта функция делает следующее:
/* Guarantee default behaviour for backwards compatibility */
if (charset_hint == NULL)
return cs_8859_1;
У вас есть для вызова хотя бы htmlentities ('xyz', ENT_QUOTES, '' )
Я не совсем уверен, но я думаю, что mbstring.func_overload
работает с htmlentities.
htmlspecialchars
не содержит кодировки кстати. (По крайней мере, до тех пор, пока кодировка поддерживает подмножество ascii, что делает utf-8).