你可以得到对应列表character =>实体由
htmlentities使用,具有函数
get_html_translation_table;考虑这个代码:
$list = get_html_translation_table(HTML_ENTITIES);
var_dump($list);
(您可能需要检查手册中该函数的第二个参数 – 也许您需要将其设置为不同于默认值的值)
它会得到你这样的东西:
array
' ' => string ' ' (length=6)
'¡' => string '¡' (length=7)
'¢' => string '¢' (length=6)
'£' => string '£' (length=7)
'¤' => string '¤' (length=8)
....
....
....
'ÿ' => string 'ÿ' (length=6)
'"' => string '"' (length=6)
' string '<' (length=4)
'>' => string '>' (length=4)
'&' => string '&' (length=5)
现在,删除你不想要的对应:
unset($list['"']);
unset($list['
unset($list['>']);
unset($list['&']);
您的列表现在具有所有对应字符=> htmlentites使用的实体,除了你不想编码的几个字符。
现在,你只需要提取键和值的列表:
$search = array_keys($list);
$values = array_values($list);
最后,你可以使用str_replace来替换:
$str_in = '
Camión español
';$str_out = str_replace($search, $values, $str_in);
var_dump($str_out);
你得到:
string '
Camión español
' (length=84)这看起来像你想要的;-)
编辑:好,除了编码问题(damn UTF-8,我想 – 我试图找到一个解决方案,并将再次编辑)
第二个编辑几分钟后:似乎你必须在$搜索列表中使用utf8_encode,之前调用str_replace 🙁
这意味着使用这样的东西:
$search = array_map('utf8_encode', $search);
在调用array_keys和调用str_replace之间。
而且,这一次,你应该真正得到你想要的:
string '
Camión español
' (length=70)这里是代码的完整部分:
$list = get_html_translation_table(HTML_ENTITIES);
unset($list['"']);
unset($list['
unset($list['>']);
unset($list['&']);
$search = array_keys($list);
$values = array_values($list);
$search = array_map('utf8_encode', $search);
$str_in = '
Camión español
';$str_out = str_replace($search, $values, $str_in);
var_dump($str_in, $str_out);
和全输出:
string '
Camión español
' (length=58)string '
Camión español
' (length=70)这一次,应该确定^^
它不真正适合在一行,可能不是最优化的解决方案;但它应该工作正常,并且具有允许您添加/删除任何对应字符的优点=>实体你需要或不。
玩的开心 !