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;
何か案は?
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);
うーん。この関数は、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);
}
素晴らしいソリューション。コピーして貼り付けたところ、問題なく動作しました。さらに調査して、検索と置換の配列に含まれていない文字をいくつか追加しました。 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/>";
}
文字が表示され、その横にASCII番号が括弧内に表示されます。このような:
echo stdump( "GPUs…");
生成:
G(71)P(80)U(85)s(115)â(226)€(128)¦(166)
お役に立てれば。
-キース
わたしにはできる:
$str=file_get_contents($file);
$array=array("‘"=>"'","’"=>"'","”"=>'"',"“"=>'"',"–"=>"-","—"=>"-","–"=>"-","…"=>"...");
$str = strtr( $str,$array);
file_put_contents($file,$str);