如何在PHP中打印一个字符串,其中所有非ASCII字符都转换为其HEX值(例如0x02)并显示? 我希望用户知道他们输入的是非ASCII值。我不想剥离他们。相反,我想显示它,以便他们可以编辑和纠正错误。
我想允许用户输入标准选项卡,新行等(可能高达ASCII 127)。
我尝试了quoted_printable_encode()
,但它显示=
为=3D
。
其他非ASCII字符为=[HEXVAL]
。等号会造成混乱。
我尝试了preg_replace('/[[:^print:]]/', '', $string)
,但最终删除了标签,换行等等。
答案 0 :(得分:3)
substr(json_encode((string)$string), 1, -1)
答案 1 :(得分:2)
对于unicode字符,这很难实现。即使有效的unicode字符(有很多)也可能无法打印,因为当前字体不包含该字符的字母定义。例如,德语unicode字体可能不包含所有有效的中文字符。
如果您只关心ascii,可以使用ctype_print()
检查字符是否可打印。
示例:
// test string contains printable and non printable characters
$string = "\x12\x12hello\x10world\x03";
$allowed = array("\x10", /* , ... */);
// iterate through string
for($i=0; $i < strlen($string); $i++) {
// check if current char is printable
if(ctype_print($string[$i]) || in_array($string[$i], $allowed)) {
print $string[$i];
} else {
// use printf and ord to print the hex value if
// it is a non printable character
printf("\\x%02X", ord($string[$i]));
}
}
输出:
\x12\x12hello
world\x03