Pen*_*e83 3 php html-encode str-replace
我对str_replace有一个非常微不足道的问题.
我有一个带有En Dash字符的字符串( - ),如下所示:
I want to remove - the dash
Run Code Online (Sandbox Code Playgroud)
html输出是
I want to remove the – the dash
Run Code Online (Sandbox Code Playgroud)
我想做这个:
$new_string = str_replace ('-','',$string);
Run Code Online (Sandbox Code Playgroud)
我试图用html_entity_decode解析字符串,解析字符以使用htmlspecialchars删除,但没有任何结果.
我做错了什么?
-EDIT-这是我的脚本的完整代码:
$title = 'Super Mario Galaxy 2 - Debut Trailer'; // Fetched from the DB, in the DB the character is - (minus) not –
$new_title = str_replace(' - ', '', $title);
$new_title = str_replace(" - ", '', $title);
$new_title = str_replace(html_entity_decode('–'),'',$title);
Run Code Online (Sandbox Code Playgroud)
没有人工作.基本上问题是在DB中,破折号存储为"减号"(我用减号键输入值),但由于一个奇怪的原因,输出是–
我在Wordpress上运行,而charset是UTF-8,对于DB整理来说也是如此.
尝试这样的事情:
str_replace(html_entity_decode('–', ENT_COMPAT, 'UTF-8'), '', $string);
Run Code Online (Sandbox Code Playgroud)
我的猜测是它不是真正的ndash,而是一个非常相似的角色.我建议拉出字符串中每个字符的字节值,看看它是什么样的:
function decodeString($str) {
//Fix for mb overloading strlen option
if (function_exists('mb_strlen')) {
$len = mb_strlen($str, '8bit');
} else {
$len = strlen($str);
}
$ret = '';
for ($i = 0; $i < $len; $i++) {
$ret .= dechex(ord($str[$i])).' ';
}
return trim($ret);
}
Run Code Online (Sandbox Code Playgroud)
这会将字符串转换为单独的字节编码(将其转换为十六进制字符串,如48 65 6C 6C 6F(Hello).检查看两个情况下的短划线实际上是相同的字符.如果你看到破折号所在的"2D",那就是字面减号...如果你看到三字节序列E2 80 93,那就是–.其他任何意味着不同的字符......
编辑:
如果你看到26 6E 64 61 73 68 3B男人的文字–,所以你需要做str_replace('–', '', $str);