Php str_replace给出错误的结果
我得到了这样的数据:“ӘҢҒҮ⻨ҚҺ”。 将此数据十六进制到以下位置:d398d086d2a2d292d2aed2b0d29ad3a8d2ba 然后为*.rtf格式添加“\”:\'d3'8d'86'2a'd2'2d'ae'2b'd2'ad'a8'2b 然后我必须得到这样的东西:\u1179\3f\u1240\3f\u1186\3f 但是str_replace只替换斜杠Q_Q 有什么建议吗 以下是完整代码:Php str_replace给出错误的结果,php,unicode,hex,rtf,str-replace,Php,Unicode,Hex,Rtf,Str Replace,我得到了这样的数据:“ӘҢҒҮ⻨ҚҺ”。 将此数据十六进制到以下位置:d398d086d2a2d292d2aed2b0d29ad3a8d2ba 然后为*.rtf格式添加“\”:\'d3'8d'86'2a'd2'2d'ae'2b'd2'ad'a8'2b 然后我必须得到这样的东西:\u1179\3f\u1240\3f\u1186\3f 但是str_replace只替换斜杠Q_Q 有什么建议吗 以下是完整代码: <? function strToHex($string) { $hex='
<?
function strToHex($string)
{
$hex='';
for ($i=0; $i < strlen($string); $i++)
{
$hex .= dechex(ord($string[$i]));
}
return $hex;
}
function extra($txt) {
$output_arr = array (
//
"\\u1179\\'3f","\\u1240\\'3f","\\u1186\\'3f","\\u1170\\'3f","\\u1198\\'3f","\\u1200\\'3f","\\u1178\\'3f","\\u1256\\'3f","\\u1210\\'3f"
);
$input_arr = array (
//
"\\'d3\\'98","\\'d0\\'86","\\'d2\\'a2","\\'d2\\'92","\\'d2\\'ae","\\'d2\\'b0","\\'d2\\'9a","\\'d3\\'a8","\\'d2\\'ba"
);
echo "<br>";
echo "data: ".$txt."<br>";
$txt = strtohex($txt);
echo "hex: ".$txt."<br>";
for ($ii=0; $ii < strlen($txt); $ii++) {
//
if (strlen($tm1)<2) {
//
$tm1.=substr($txt,$ii,1);
}
else
{
//
$ret.="\\'".$tm1;
$tm1='';
}
}
echo "RET:[".$ret."]<br>";
$ret = str_replace($input_arr,$output_arr,$ret);
echo "RETREP:[".$ret."]<br>";
return $ret;
}
extra("ӘІҢҒҮҰҚӨҺ");
?>
我认为您的代码没有直接的问题,只是您用作示例的字符串不包含
$input\u arr
中的任何序列。我手动将\'d3\8d
添加到该列表中,并且替换工作正常,因此这可能是问题的根源
您似乎正在将UTF-8转换为ASCII表示形式,该表示形式将Unicode字符转义为
\u{code}\3f
,因此您可能能够利用它转义&{code}代码>格式。由于“for”循环中的“if”逻辑,我得到了错误的结果。
这是正确的一个:
for ($ii=0; $ii < strlen($txt); $ii++) {
//
if (strlen($tm1)<2) {
//
$tm1.=substr($txt,$ii,1);
}
if (strlen($tm1)==2) {
//
$ret.="\\'".$tm1;
$tm1='';
}
}
for($ii=0;$ii 如果(strlen($tm1)check@Tom,no。这不是给我的,这些字母是从mysql数据库中提取的。它们是unicode(utf8)格式。因此,我尝试比较hexed值并使用rtf spec format替换它。mb_str_replace是您要查找的内容。字符串只包含字符[0-9a-f\\\\'],在这种情况下,多字节函数能实现什么?我已经发现了错误并解决了问题。:)哦,谢谢你的utf8tohtml。