我的网站是win-1251编码,它需要保持这种状态。但我还需要能够回显一些包含非拉丁语,非西里尔字符的链接,例如šžāņūī
......
我需要一个转换此
的函数"māja un man tā patīk"
到
"māja un man tā patīk"
并且不会触及html,因此如果有<b>
则需要保留为<b>
,而不是>
或<
请不要对编码及其错误提出建议。
答案 0 :(得分:0)
您可能不想编码的主要内容是&lt;,&gt;和&amp ;.那些真的是唯一的特殊角色。那么如何首先编码所有内容,然后解码&lt;,&gt;和&amp;我觉得你应该没事。
这是未经测试的:
$output =
htmlspecialchars_decode(
htmlentities($input, ENT_NOQUOTES, 'CP-1251')
);
让我知道
答案 1 :(得分:0)
Evert建议对我来说也是合乎逻辑的!如果你坚持这是一种方法,如果只有两个字母打扰你。对于更多的字母,scrit不会那么有效,需要改变。
<?PHP
function myConvert($str)
{
$chars['ā']='ā';
$chars['ī']='ī';
foreach ($chars as $key => $value)
$output = str_replace($key, $value, $str);
echo $str;
}
myConvert("māja un man tā patī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āja un man tā patīkī"));
fclose($fh);
?>
所需的输出写入文本文件中。这个代码完全如同 - 在某个项目中没有合并 - 做它声称要做的事情。将ā
之类的代码转换为它们出现的类似字符。
答案 2 :(得分:0)
$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āchan</b> おばあちゃん