str_replace 不处理奇怪的字符
str_replace not working on strange character
我使用 get_the_title()
函数从我的 Wordpress post 标题中得到这个字符串 "Holder – 2pcs"
然后我使用 str_replace
来替换“–”字符但是没有运气!
str_replace("–","-","Holder – 2pcs");
感谢任何帮助!
编辑:
(回复评论)
我不得不将文本从 $title1=get_the_title();
保存到 .txt
文件,我注意到 – 在 txt 文件中保存为 –
... 然后我替换了 str_replace("–","-","Holder – 2pcs")
并且有效!问题是,在我的 wordpress 数据库中,标题包含 - char,因为它应该,但是当我在我的代码中使用 wordpress 的 get_the_title();
函数来检索标题时,我得到 - char as – 最终是 –
我不知道为什么 get_the_title();
导致这个问题!
有什么想法吗?
您分享的代码does work:
var_dump(str_replace("–","-","Holder – 2pcs"));
string(13) "Holder - 2pcs"
如果不是,他们实际上是 运行 不同的东西。很可能,您的输入数据包含白色 space 或 HTML 实体,而您正通过浏览器眼镜查看它。
尝试进一步检查您的输入数据,例如:
header('Content-Type', 'text/plain');
var_dump("Holder – 2pcs", bin2hex("Holder – 2pcs"));
string(15) "Holder – 2pcs"
string(30) "486f6c64657220e280932032706373"
您的问题是由于您的“-”字符是其他看起来相同的。
第 1 步:
确保所有内容都是 using the same Character set,从 MySQL 到 PHP 再到输入文本。
$title1 = iconv(mb_detect_encoding(get_the_title(), mb_detect_order(), true), "UTF-8", get_the_title());
(reference)
第 2 步:
确保您转换的是原始字符串而不是 HTML 编码输出
$title2 = html_entity_decode($title1, ENT_NOQUOTES | ENT_HTML5, "UTF-8");
第 3 步:
运行 最初尝试的 str_replace()
功能。如果有一系列可能的 "dash" 个字符,那么您可以构建一个数组:
$dashes = ['–','–','—','-'];
$title3 = str_replace($dashes,"-",$title2);
我使用 get_the_title()
函数从我的 Wordpress post 标题中得到这个字符串 "Holder – 2pcs"
然后我使用 str_replace
来替换“–”字符但是没有运气!
str_replace("–","-","Holder – 2pcs");
感谢任何帮助!
编辑:
(回复评论)
我不得不将文本从 $title1=get_the_title();
保存到 .txt
文件,我注意到 – 在 txt 文件中保存为 –
... 然后我替换了 str_replace("–","-","Holder – 2pcs")
并且有效!问题是,在我的 wordpress 数据库中,标题包含 - char,因为它应该,但是当我在我的代码中使用 wordpress 的 get_the_title();
函数来检索标题时,我得到 - char as – 最终是 –
我不知道为什么 get_the_title();
导致这个问题!
有什么想法吗?
您分享的代码does work:
var_dump(str_replace("–","-","Holder – 2pcs"));
string(13) "Holder - 2pcs"
如果不是,他们实际上是 运行 不同的东西。很可能,您的输入数据包含白色 space 或 HTML 实体,而您正通过浏览器眼镜查看它。
尝试进一步检查您的输入数据,例如:
header('Content-Type', 'text/plain');
var_dump("Holder – 2pcs", bin2hex("Holder – 2pcs"));
string(15) "Holder – 2pcs" string(30) "486f6c64657220e280932032706373"
您的问题是由于您的“-”字符是其他看起来相同的。
第 1 步:
确保所有内容都是 using the same Character set,从 MySQL 到 PHP 再到输入文本。
$title1 = iconv(mb_detect_encoding(get_the_title(), mb_detect_order(), true), "UTF-8", get_the_title());
(reference)
第 2 步:
确保您转换的是原始字符串而不是 HTML 编码输出
$title2 = html_entity_decode($title1, ENT_NOQUOTES | ENT_HTML5, "UTF-8");
第 3 步:
运行 最初尝试的 str_replace()
功能。如果有一系列可能的 "dash" 个字符,那么您可以构建一个数组:
$dashes = ['–','–','—','-'];
$title3 = str_replace($dashes,"-",$title2);