在PHP中将非ASCII字符打印为十六进制 - php

如何在PHP中打印一个字符串,其中所有非ASCII字符都被转换为它们的HEX值(例如0x02)并显示?
我希望用户知道他们正在输入非ASCII值。我不想剥掉它们。相反,我想显示它,以便他们可以编辑和更正错误。

我想允许用户输入标准选项卡,换行等(也许最高为ASCII 127)。

我尝试了quoted_printable_encode(),但它将=显示为=3D
其他非ASCII字符,如=[HEXVAL]。等号会造成混乱。

我尝试了preg_replace('/[[:^print:]]/', '', $string),但最终删除了标签,换行等。

参考方案

对于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

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

PHP mysqli获取查询返回的第一行的值 - php

我正在使用mysqli从数据库中获取某些数据。我正在使用的查询已设置为仅从数据库返回一行。有没有一种方法可以在不使用while循环的情况下获取该行的值?我知道一个while循环对于返回多于一行的行很有用,但是如果不需要while循环,我想避免这种情况,因为不必要的代码是不好的编程。 参考方案 是的-您可以使用:$row = $result->fetch…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…

更改默认的URL PHP - php

如何更改默认网址。例如www.example.com/index.php-> www.example.com现在,我要将其设置为www.example.com/test.php。我应该在php.ini中进行更改吗? 参考方案 假设您正在使用apache,则可以通过DirectoryIndex指令执行此操作。Check out the docs。