gio*_*o79 18 php ms-word utf-8 character-encoding
我正在尝试转换由包含MS Word省略号和长划线的用户粘贴的Word文本,然后再进行处理.
我在这里找到了一个旧的解决方案http://www.codingforums.com/archive/index.php/t-47163.html,但它对我不起作用.例如,在替换省略号之后,变量返回为空.以前从未见过这样的事:
$src = "Long word dash – and weird Word ellipsis…";
$src = str_replace("‘", "'", $src);
$src = str_replace("’", "'", $src);
$src = str_replace("”", '"', $src);
$src = str_replace("“", '"', $src);
$src = str_replace("–", "-", $src);
$src = str_replace("…", "...", $src);
print $src;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
小智 42
对于任何在PHP中获得钻石问号的人来说,这种替换UTF-8字符的方法比使用chr函数更有效.
$search = [ // www.fileformat.info/info/unicode/<NUM>/ <NUM> = 2018
"\xC2\xAB", // « (U+00AB) in UTF-8
"\xC2\xBB", // » (U+00BB) in UTF-8
"\xE2\x80\x98", // ‘ (U+2018) in UTF-8
"\xE2\x80\x99", // ’ (U+2019) in UTF-8
"\xE2\x80\x9A", // ‚ (U+201A) in UTF-8
"\xE2\x80\x9B", // ? (U+201B) in UTF-8
"\xE2\x80\x9C", // “ (U+201C) in UTF-8
"\xE2\x80\x9D", // ” (U+201D) in UTF-8
"\xE2\x80\x9E", // „ (U+201E) in UTF-8
"\xE2\x80\x9F", // ? (U+201F) in UTF-8
"\xE2\x80\xB9", // ‹ (U+2039) in UTF-8
"\xE2\x80\xBA", // › (U+203A) in UTF-8
"\xE2\x80\x93", // – (U+2013) in UTF-8
"\xE2\x80\x94", // — (U+2014) in UTF-8
"\xE2\x80\xA6" // … (U+2026) in UTF-8
];
$replacements = [
"<<",
">>",
"'",
"'",
"'",
"'",
'"',
'"',
'"',
'"',
"<",
">",
"-",
"-",
"..."
];
str_replace($search, $replacements, $string);
Run Code Online (Sandbox Code Playgroud)
小智 10
嗯.我使用此函数来清理复制到RTE中的文本.在这种情况下它可能会或可能不会起作用.它转换为HTML实体,但您可以将其调整为仅转换为常规字符:
function convertFromCP1252($string)
{
$search = array('&',
'<',
'>',
'"',
chr(212),
chr(213),
chr(210),
chr(211),
chr(209),
chr(208),
chr(201),
chr(145),
chr(146),
chr(147),
chr(148),
chr(151),
chr(150),
chr(133),
chr(194)
);
$replace = array( '&',
'<',
'>',
'"',
'‘',
'’',
'“',
'”',
'–',
'—',
'…',
'‘',
'’',
'“',
'”',
'–',
'—',
'…',
''
);
return str_replace($search, $replace, $string);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
好的解决方案 我复制并粘贴它,它解决了一个问题.在进一步研究中,我添加了一些不在搜索和替换数组中的字符.为了找到ASCII字符id号,我写了一个PHP函数,它显示了ASCII字符编号是什么:
function stdump($s){
for($i=0;$i<strlen($s);$i++){
echo substr($s,$i,1) . "(" . ord(substr($s,$i,1)) . ")";
}
echo "<br/>";
}
Run Code Online (Sandbox Code Playgroud)
显示字符,旁边显示ascii数字括号.像这样:
echo stdump("GPU"|);
生产:
G(71)P(80)U(85)S(115)A(226)€(128)|(166)
希望这可以帮助.
--Keith
| 归档时间: |
|
| 查看次数: |
17536 次 |
| 最近记录: |