0

$str = str_replace ('–', '-', $str);動作しません (私が望むように、長い Unicode ダッシュ文字はマイナス文字に置き換えられません。

$str はデータベースから読み取られ、UTF-8 である必要があります。

PHP コードは Apache サーバーから実行されます。

これらの長いダッシュをすべてマイナス文字に置き換える必要があります。


$ダッシュ = "–";
echo "文字列: " . bin2hex($str) . ", ダッシュ: " . bin2hex($ダッシュ) . "\n";
echo "文字列: " . $str . ", ダッシュ: " . $ダッシュ。"\n";

string: 5a656c626f726166202623383231313b20d0bdd0bed0b2d18bd0b920d0bfd180d0b5d0bfd0b0d180d0b0d18220d0b4d0bbd18f20d0bbd0b5d187d0b5d0bdd0b8d18f20d0bcd0b5d0bbd0b0d0bdd0bed0bcd18b, dash: e28093
文字列: Zelboraf – новый препарат для лечения меланомы, ダッシュ: –</pre>

何が間違っていますか (適切な UTF-8 ではありません): 文字列またはダッシュ?

4

3 に答える 3

3

それは "–" でエンコードされた HTML エンティティでした :-) それは私の失敗です。

于 2012-09-27T14:12:11.423 に答える
1
<?php

$str = 'Test–asd';

$old = '–';
$new = '!';

$str = str_replace ( $old, $new, $str );

echo $str;

?>

これは私にとっては問題なく機能します:

出力:

Test!asd

UTF8文字の変更ではなく、さまざまなエンコーディングに問題があるようです。

于 2012-09-27T12:27:26.207 に答える
0

編集:

これを試して:

$str = str_replace('\xe2\x80\x94', '-', $str);

試す:

$str = str_replace(chr(150), '-', $str);    // endash

また

$str = str_replace(chr(151), '-', $str);   // emdash

2番目の方が似合うと思います。

于 2012-09-27T12:10:06.427 に答える