如何在PHP中打印一个字符串,其中所有非ascii字符转换为其十六进制值(例如。0x02),并显示?我希望用户知道他们正在输入非ascii值。我不想剥光它们。相反,我想显示它,以便他们可以编辑和纠正错误。
我想让用户输入标准制表符,新行等(可能高达ASCII 127)。
我尝试了quoted_printable_encode()
,但它显示=
为=3D
。其他非ascii字符,如=[HEXVAL]
。等号会造成混淆。
我尝试了preg_replace('/[[:^print:]]/', '', $string)
,但它最终删除了制表符,新行等
substr(json_encode((string)$string), 1, -1)
对于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