Home  >  Article  >  Backend Development  >  Discussion on the method of php regular detection whether it is in JSON format

Discussion on the method of php regular detection whether it is in JSON format

WBOY
WBOYOriginal
2016-07-25 08:57:321040browse
  1. $json_string = json_encode(array(
  2. 'blog.9696e.com'
  3. ));
  4. echo preg_match('/[^,:{}\[\]0-9.- +Eaeflnr-u nrt]/',$json_string) ? 'yes' : 'no';
  5. ?>
Copy the code

Use the above code to detect whether it is in json format, and the effect is good.

Attachment, the solution to the Chinese problem when php processes json

When converting the object into json, one of the Chinese attributes became null.

  1. $usr = new User();
  2. echo json_encode($usr);
  3. ?>
Copy the code

Everything is normal when there is no Chinese, the output is as follows: {"PlatformID":"123213","UserID":"1023"}

The following two exceptions will occur in Chinese.

Case 1, if an attribute whose value is Chinese in the object itself is UTF-8 encoded, there will be the following output: {"PlatformID":"123213","UserID":"1023","UserName":"u00b7u00f0u00b5u00b2u00c9u00b1u00b7u00f0u00ccu00fc"} The UserName is in a non-human language. If you use firebug to see it, it is in Chinese.

Case 2, non-utf-8 encoding, the output will become null: {"PlatformID":"123213","UserID":"1023","UserName":null}

After checking the manual, I found that json_encode is only valid for utf-8, and other encodings will become null.

How to solve the problem of encoding conversion? Consider the following example. Example:

  1. private function to_utf8($in)
  2. {
  3. if (is_array($in)) {
  4. foreach ($in as $key => $value)
  5. {
  6. $out[ $this->to_utf8($key)] = $this->to_utf8($value);
  7. }
  8. }
  9. elseif(is_string($in))
  10. {
  11. if(mb_detect_encoding($in) != "UTF -8 ")
  12. Return utf8_encode ($ in);
  13. Else
  14. Return $ in;
  15. }
  16. Lse {
  17. Return $ in;
  18. }
  19. Return $ OUT;
  20. & gt;
Copy code
Test: 1. Output $usr->UserName directly, and set charset=utf-8 in the page header. Garbled characters 2. echo json_encode($usr) outputs UserName=null 3. The page header is set to charset=gbk, and the output is correct -> it can be determined that the original encoding is gbk

Conclusion: 1. Ensure that the character set of the page is consistent with the database, and the output must be normal. 2. When doing json_encode, ensure that the data encoding is utf-8 and json_decode is normal. 3. If you want to json_encode non-utf-8 characters, convert them to utf-8 first. 4. When doing json_decode on non-utf-8 characters, remember to convert to the original encoding, otherwise garbled characters will be output.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn