1.php的函p函openssl_sign($data,$sign,$private_key)这个函数的源码是什么?
2.phpurlencode()与urldecode()函数字符编码原理详解
3.本人才接触php,不会写函数。数的数式先诚求一个函数,源码替换掉一段语句,编程谢谢!函p函附代码如下
php的openssl_sign($data,$sign,$private_key)这个函数的源码是什么?
PHP_FUNCTION(openssl_sign)
{
zval **key, *signature;
EVP_PKEY *pkey;
int siglen;
unsigned char *sigbuf;
long keyresource = -1;
char * data;
int data_len;
EVP_MD_CTX md_ctx;
zval *method = NULL;
long signature_algo = OPENSSL_ALGO_SHA1;
const EVP_MD *mdtype;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szZ|z", &data, &data_len, &signature, &key, &method) == FAILURE) {
return;
}
pkey = php_openssl_evp_from_zval(key, 0, "", 0, &keyresource TSRMLS_CC);
if (pkey == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "supplied key param cannot be coerced into a private key");
RETURN_FALSE;
}
if (method == NULL || Z_TYPE_P(method) == IS_LONG) {
if (method != NULL) {
signature_algo = Z_LVAL_P(method);
}
mdtype = php_openssl_get_evp_md_from_algo(signature_algo);
} else if (Z_TYPE_P(method) == IS_STRING) {
mdtype = EVP_get_digestbyname(Z_STRVAL_P(method));
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown signature algorithm.");
RETURN_FALSE;
}
if (!mdtype) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown signature algorithm.");
RETURN_FALSE;
}
siglen = EVP_PKEY_size(pkey);
sigbuf = emalloc(siglen + 1);
EVP_SignInit(&md_ctx, mdtype);
EVP_SignUpdate(&md_ctx, data, data_len);
if (EVP_SignFinal (&md_ctx, sigbuf,(unsigned int *)&siglen, pkey)) {
zval_dtor(signature);
sigbuf[siglen] = '\0';
ZVAL_STRINGL(signature, (char *)sigbuf, siglen, 0);
RETVAL_TRUE;
} else {
efree(sigbuf);
RETVAL_FALSE;
}
EVP_MD_CTX_cleanup(&md_ctx);
if (keyresource == -1) {
EVP_PKEY_free(pkey);
}
}
这个是函数的源码,C写的源码。源码可以在php官网下载一个php版本,编程解压打开里面的函p函ext/openssl.c搜上面代码即可。
phpurlencode()与urldecode()函数字符编码原理详解
PHP中的数的数式urlencode与urldecode函数字符编码原理 一、答案概述 在PHP中,源码`urlencode`函数用于对URL进行编码,编程以便将其中的函p函hypescan源码特殊字符转换为适合传输的格式。而`urldecode`函数则用于对已经经过URL编码的数的数式数据进行解码,恢复其原始状态。源码这两个函数主要基于ASCII码和UTF-8编码标准进行操作。 二、urlencode函数原理 `urlencode`函数会将字符串中的非标准ASCII字符转换为对应的百分比编码。这种编码方式通过将字符的aliplayer 源码ASCII码值转换为十六进制表示,并在前面加上百分号来实现。例如,空格字符在URL中不能直接传输,因此会被转换为"%"。其他特殊字符如!@#$%^&*等,也会遵循相同的gagahi 源码转换规则。这样做的主要目的是确保URL在传输过程中的稳定性和兼容性。 三、urldecode函数原理 与`urlencode`相反,`urldecode`函数的作用是将经过百分比编码的URL字符串还原为原始状态。它通过识别百分比编码格式并转换回相应的字符来实现解码。例如,paymentapi源码"%"会被解码回空格字符。这个函数能够解析大多数标准的百分比编码序列,恢复URL中的原始数据。 四、字符编码的重要性 在Web开发中,字符编码的正确性对于确保数据的正确传输和显示至关重要。特别是在处理包含特殊字符或非英文字符的URL时,`urlencode`和`urldecode`函数能够确保数据的正确编码和解码,避免因字符问题导致的错误或数据丢失。因此,了解这两个函数的编码原理对于Web开发者来说是非常必要的。 总结来说,`urlencode`和`urldecode`是PHP中处理URL编码和解码的常用函数。它们基于ASCII码和UTF-8编码标准,确保URL在传输过程中的稳定性和兼容性。了解这两个函数的原理对于处理Web开发中遇到的字符编码问题至关重要。本人才接触php,不会写函数。先诚求一个函数,替换掉一段语句,谢谢!附代码如下
<?php
/
**这是一个访问范围的问题,方法里面的参数的适用范围只适用于这个方法内部 所以没有值,你需要把这两个参数传进来
*/
if($Url){
$itemUrl=$Url;
}else{
$itemUrl="网址";
}
if($Pic){
$background=$Pic;
}else{
$background="地址";
}
show($itemUrl,$background);
function show($itemUrl,$background){
echo'<div class="sharp">
<b class="b1" style="background:url('.$background.') -3px 0 no-repeat;"></b>
<b class="b2" style="background:url('.$background.') -2px -1px no-repeat;"></b>
<b class="b3" style="background:url('.$background.') -1px -2px no-repeat;"></b>
<div class="content" style="background:url('.$background.') 0 -3px no-repeat;"><a href="'.$itemUrl.'" target="_blank">求php函数啊,谢谢</a></div>
<b class="b4" style="background:url('.$background.') -1px -px no-repeat;"></b>
<b class="b5" style="background:url('.$background.') -2px -px no-repeat;"></b>
<b class="b6" style="background:url('.$background.') -3px -px no-repeat;"></b>
</div>';
}
>