php не латинская функция в hex - PullRequest
0 голосов
/ 13 октября 2011

У меня есть веб-сайт в кодировке win-1251, и он должен оставаться таким. Но мне также нужно иметь возможность отображать несколько ссылок, которые содержат не латинские, не кириллические символы, такие как šžāņūī ...

Мне нужна функция, которая преобразует это

"māja un man tā patīk"

до

"māja un man tā patīk"

и это не касается html, поэтому, если есть <b>, оно должно оставаться как <b>, а не &gt; или &lt;

И, пожалуйста, никаких советов по поводу кодировки и как это неправильно.

Ответы [ 3 ]

0 голосов
/ 14 октября 2011

То, что предлагает Эверт, мне тоже кажется логичным!Если вы настаиваете, это способ сделать это, если вас беспокоит только две буквы.Для большего количества букв скрит не будет столь эффективным и должен быть изменен.

<?PHP 
    function myConvert($str)
    {
        $chars['&#257;']='ā';
        $chars['&#299;']='ī';
                foreach ($chars as $key => $value)  
                    $output = str_replace($key, $value, $str); 
        echo $str;
    }
    myConvert("m&#257;ja un man t&#257; pat&#299;k");
?>

================== отредактировано ==============

Для многих символов этот может быть полезен:

<?PHP  
    function myConvert($str)
    {  
        $final=null;  
        $parts = preg_split("/&#[0-9]*;/i", $str);//get all text parts
        preg_match_all("/&#[0-9]*;/i", $str, $delimiters );//get delimiters;   
        $delimiters[0][]='';//make arrays equal size  
        foreach($parts as $key => $value)
            $final.=$value.mb_convert_encoding
            ($delimiters[0][$key], "UTF-8", "HTML-ENTITIES");
        return $final; 
    }  
$fh = fopen("testFile.txt", 'w') ; 
fwrite($fh, myConvert("m&#257;ja un man t&#257; pat&#299;k&#299;")); 
fclose($fh); 
?>

Требуемый вывод записывается в текстовом файле.Этот код, точно такой, каким он не объединен в каком-либо проекте, делает то, что, как он утверждает, делает.Преобразует коды типа &#257; в аналогичные символы, которые они представляют.

0 голосов
/ 15 октября 2011
$str = "<b>Obāchan</b> おばあちゃん";

$str = preg_replace_callback('/./u', function ($matches) {
    $chr = $matches[0];
    if (strlen($chr) > 1) {
        $chr = mb_convert_encoding($chr, 'HTML-ENTITIES', 'UTF-8');
    }
    return $chr;
}, $str);

Это предполагает, что исходный $str будет в кодировке UTF-8, т.е. ваш файл PHP должен быть сохранен в UTF-8.Он кодирует все не ASCII-совместимые кодовые точки в HTML-объекты.Поскольку все специальные символы HTML являются символами ASCII, они остаются нетронутыми.Результирующая строка является чистой ASCII.Поскольку нижние кодовые точки Win-1251 совместимы с ASCII, полученная строка также является допустимой строкой Win-1251.Выше $str преобразуется в:

<b>Ob&#257;chan</b> &#12362;&#12400;&#12354;&#12385;&#12419;&#12435;
0 голосов
/ 14 октября 2011

Основные вещи, которые вы, вероятно, не хотите кодировать, это <,> и &.Это действительно единственные специальные символы.Итак, как насчет кодирования всего сначала, а затем просто декодировать <,> и я чувствую, что с вами все будет в порядке.

Это не проверено:

$output = 
  htmlspecialchars_decode(
     htmlentities($input, ENT_NOQUOTES, 'CP-1251')
  );

дайте мне знать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...